Stata中计算两个不同格式日期变量的月数差值问题
在Stata中计算不同格式字符串日期的月份差
问题核心
直接对字符串类型的日期变量执行减法运算无效,Stata无法识别字符串的算术操作。必须先将两个不同格式的字符串日期转换为Stata可处理的数值型日期变量,再进行差值计算。
解决步骤
1. 转换字符串日期为数值型日期
使用Stata内置的date()函数解析字符串,需匹配对应日期格式:
V00EVDATE是MM/DD/YYYY格式,用"MDY"作为格式代码DateofDeath是MM/DD/YY格式,同样用"MDY",并通过第三个参数指定两位数年份的解析规则(这里设为2020,即00-19对应2000-2019,20-99对应1920-1999,匹配你的数据示例)
执行代码:
* 转换V00EVDATE为数值型日期并设置显示格式 gen evdate = date(V00EVDATE, "MDY") format evdate %td * 转换DateofDeath为数值型日期并设置显示格式 gen deathdate = date(DateofDeath, "MDY", 2020) format deathdate %td
2. 验证转换结果
查看前4行数据确认转换是否正确:
list V00EVDATE evdate DateofDeath deathdate in 1/4
3. 计算月份差
- 整数月份差:用
mofd()函数将日期转换为「年月」数值(从1960年1月起的月数),直接相减得到整数月份差:
gen Months = mofd(deathdate) - mofd(evdate)
- 精确月份差:若需包含小数的精细差值,用天数差除以平均每月天数(30.4375):
gen Months_exact = (deathdate - evdate)/30.4375
完整代码
* 转换字符串日期为数值型日期 gen evdate = date(V00EVDATE, "MDY") format evdate %td gen deathdate = date(DateofDeath, "MDY", 2020) format deathdate %td * 计算整数月份差 gen Months = mofd(deathdate) - mofd(evdate) * 可选:计算精确月份差 gen Months_exact = (deathdate - evdate)/30.4375
内容的提问来源于stack exchange,提问作者JamesLancaster
相关产品推荐
相关产品推荐

