在 Stata 中提取/填充年份和月度变量

Extracting/filling year and monthly variables in Stata

提问人:Kathryn Overton 提问时间:10/21/2023 最后编辑:Nick CoxKathryn Overton 更新时间:10/21/2023 访问量:29

问:

[Data editor screenshot]

以上是我在 Stata 中的数据。数据是使用 incidentCodemonthlyDatextset。我需要对调用的变量 yearmonth 进行插值、填充或提取缺失值。名为 monthlyDate 的变量是一个数字日期时间变量,而不是字符串!它使用 %tm 进行格式化。

这是我已经尝试过的:

  1. 当我使用 tostring 转换 monthlyDate 时,我变得乱码。

2.当我使用 ipolate 填充年份中的缺失值时,我得到的小数位无法正确舍入,因为我的数据是使用月份进行 xtset 的。

3.当我尝试使用 monthlyDate 变量进行结转时,我也会乱码。

4.最后,当我尝试使用year参数/命令从datetime变量中提取年份时,这些值毫无意义。

datetime stata tostring

评论


答:

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
完美!谢谢,尼克!成功了。