Stata 设置从负到正的时间计数
如果有一个有月的数据集,每个人都有不同的开始工作的月份。例如:Stata 设置从负到正的时间计数,stata,Stata,如果有一个有月的数据集,每个人都有不同的开始工作的月份。例如: person date date_started date_count Tim 1/1/2000 3/1/2000 -2 Tim 2/1/2000 3/1/2000 -1 Tim 3/1/2000 3/1/2000 0 John
person date date_started date_count
Tim 1/1/2000 3/1/2000 -2
Tim 2/1/2000 3/1/2000 -1
Tim 3/1/2000 3/1/2000 0
John 1/1/2000 7/1/2000 -6
John 2/1/2000 7/1/2000 -5
John 3/1/2000 7/1/2000 -4
John 4/1/2000 7/1/2000 -3
John 5/1/2000 7/1/2000 -2
John 6/1/2000 7/1/2000 -1
John 7/1/2000 7/1/2000 0
John 8/1/2000 7/1/2000 1
John 9/1/2000 7/1/2000 2
John 10/1/2000 7/1/2000 3
Mary 3/1/2000 3/1/2000 0
Mary 4/1/2000 3/1/2000 1
获取
date\u count
列的最有效方法是什么?我还有一个列,第一个月是1,否则是0。我宁愿用它来计算日期,我不知道这是否是最佳方法,但我认为它应该有效:
/* convert your dates to Stata's date format from strings */
gen date2=daily(date,"MDY");
gen date_started2=daily(date_started,"MDY");
format date2 date_started2 %td;
/* this is the main code */
gen before = date_started2>date2;
bys person before: egen date_count2 = rank(abs(date_started2 - date2));
replace date_count2 = date_count2 - 1 if before==0;
replace date_count2 = -date_count2 if before==1;
drop before;
编辑:
我有罪。我完全误解了你的问题,认为你想为每个人的观察活动开始倒计时。实际上,您想要的是更简单的东西:
gen date_count2=mofd(每日(日期,“MDY”)-mofd(每日(开始日期,“MDY”))
这假设您使用的是作为字符串变量存储的date和date_start。daily()转换为Stata日期格式,mofd()转换为日历月。那就是区别了。我不明白这里有什么困难。对我来说,这个问题似乎解释得不好
(后来补充)我的不确定性表明,当人们在国际名单上假设地方公约是普遍的时,会发生什么。有两种约定很容易混淆,日期显示为日/月/年,日期显示为月/日/年。显然你在使用第二个约定。如果是,问题是使用
mofd()
,将每日日期转换为每月日期;那么,正如我所说,这是一个减法 这确实有效,但我相信倒数第二行before==1
应该是before==0
?您尝试了什么?尝试差异年-月日期变量(在date
帮助文件下查找ym()
)。