Stata 提取/填充年份和月份变量
问题描述
以上是我在Stata中的数据。数据是使用 xtset 命令设置的,使用变量 incidentCode 和 monthlyDate 。我需要对名为 year 和 month 的变量进行插值、填充或提取缺失值。变量 monthlyDate 是一个数值日期时间变量,而不是字符串!它使用%tm格式进行格式化。
以下是我已经尝试过的方法:
- 当我使用 tostring 命令将monthlyDate转换为字符串时,得到的是无意义的乱码。
2.当我使用 ipolate 命令填充变量 year 的缺失值时,得到的小数位无法正确取整,因为我的数据使用了以月为单位的 xtset 。
3.当我尝试使用 carryforward 命令根据 monthlyDate 变量填充缺失值时,也得到了无意义的乱码。
4.最后,当我尝试使用 year 参数/命令从日期时间变量中提取年份时,得到的值是没有意义的。
解决方案
一个月日期是一个整数,从1959年12月取值为-1,1960年1月取值为0,1960年2月取值为1,以此类推。它不是年度或每日日期,但通常提取年份或月份组成部分的一种简单方法是先将其转换为每日日期。
* Example generated by -dataex-. For more info, type help dataex
clear
input float mdate
518
554
594
670
end
format mdate %tm
gen year = year(dofm(mdate))
gen month = month(dofm(mdate))
list
+------------------------+
| mdate year month |
|------------------------|
1. | 2003m3 2003 3 |
2. | 2006m3 2006 3 |
3. | 2009m7 2009 7 |
4. | 2015m11 2015 11 |
+------------------------+
在你的解决方案中,
1 最多只是在错误的方向上迈出的一步,因为转换问题是数值到数值的。
2 在这里无法帮助,因为年份和月份在每月日期中都不是线性的,所以 插值
无法应用。
3 可能失败,因为你的日期不是规律的序列。
4 失败,因为 year()
是基于每日日期,而不是每月日期。
直接解决方案包括
gen month = 1 + mod(mdate, 12)
gen year = 1960 + floor(mdate/12)