提问人:Kathryn Overton 提问时间:10/21/2023 最后编辑:Nick CoxKathryn Overton 更新时间:10/21/2023 访问量:29
在 Stata 中提取/填充年份和月度变量
Extracting/filling year and monthly variables in Stata
问:
[]
以上是我在 Stata 中的数据。数据是使用 incidentCode 和 monthlyDate 的 xtset。我需要对调用的变量 year 和 month 进行插值、填充或提取缺失值。名为 monthlyDate 的变量是一个数字日期时间变量,而不是字符串!它使用 %tm 进行格式化。
这是我已经尝试过的:
- 当我使用 tostring 转换 monthlyDate 时,我变得乱码。
2.当我使用 ipolate 填充年份中的缺失值时,我得到的小数位无法正确舍入,因为我的数据是使用月份进行 xtset 的。
3.当我尝试使用 monthlyDate 变量进行结转时,我也会乱码。
4.最后,当我尝试使用year参数/命令从datetime变量中提取年份时,这些值毫无意义。
答:
2赞
Nick Cox
10/21/2023
#1
月度日期是 ...、-1 表示 1959 年 12 月、0 表示 1960 年 1 月、1960 年 2 月等整数。它不是每年或每天的日期,但提取年或月成分的一种简单方法通常是先将其转换为每日日期。
* 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 在这里无能为力,如果只是因为年份和月份在月度日期上都不是线性的,所以不能申请。ipolate
3 可能失败,因为你的日期不是规则的序列。
4 失败,因为按每日日期(而不是每月日期)提供源。year()
直接解决方案包括
gen month = 1 + mod(mdate, 12)
gen year = 1960 + floor(mdate/12)
评论
0赞
Kathryn Overton
10/21/2023
完美!谢谢,尼克!成功了。
评论