我正在尝试使用Stata中的monthly()
函数将一组月 - 月对从字符串转换为数字。此变量的数据如下所示:
rcsbirth
072005
101993
012001
121994
我可以使用date()
函数执行此操作,如下所示:
gen childbirth = date(rcsbirth,"MY")
然后我用
format childbirth %td
和
childbirth
现在列为
01jul2005
01oct1993
01jan2001
01dec1994
各自的rcsbirth
日期。
当我尝试使用monthly()
函数应用此相同的过程,并使用%tm
而不是date()
格式化%td
时,会生成所有缺失值新的分娩变量。
同样,我正在尝试申请:
gen childbirth = monthly(rcsbirth, "MY")
答案 0 :(得分:2)
我确认了这个问题并且无法解释。
以下两种方法可以从示例数据中获取一行中的每月日期。
input str6 rcsbirth
"072005"
"101993"
"012001"
"121994"
end
gen childbirth = ym(real(substr(rcsbirth,-4,4)), real(substr(rcsbirth, 1, 2)))
gen childbirth2 = mofd(date(rcsbirth, "MY"))
format childbirth* %tm
l
+--------------------------------+
| rcsbirth childb~h childb~2 |
|--------------------------------|
1. | 072005 2005m7 2005m7 |
2. | 101993 1993m10 1993m10 |
3. | 012001 2001m1 2001m1 |
4. | 121994 1994m12 1994m12 |
+--------------------------------+
答案 1 :(得分:1)
日期时间翻译帮助文件(help datetime_translation
)指出:
“ ... monthly()转换年份和月份数字(1-12)...”
因此,以下内容有效:
generate wanted = monthly(substr(rcsbirth, 1, 2) + " " + substr(rcsbirth, 3, .), "MY")
format wanted %tm
list
+--------------------+
| rcsbirth wanted |
|--------------------|
1. | 072005 2005m7 |
2. | 101993 1993m10 |
3. | 012001 2001m1 |
4. | 121994 1994m12 |
+--------------------+
换句话说,月份必须由年份-
或/
隔开。