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()转换为日历月。那就是区别了。

我不明白这里有什么困难。对我来说,这个问题似乎解释得不好

  • 您提到了月份,但您的示例显示了每日日期,因此月份在问题中的作用是个谜

  • 您想要的变量只是两个每日日期之间的差值。只要您有两个每日日期变量(Dimitry解释了如何从字符串日期获取这些变量),它就只是一个减法


  • (后来补充)我的不确定性表明,当人们在国际名单上假设地方公约是普遍的时,会发生什么。有两种约定很容易混淆,日期显示为日/月/年,日期显示为月/日/年。显然你在使用第二个约定。如果是,问题是使用
    mofd()
    ,将每日日期转换为每月日期;那么,正如我所说,这是一个减法

    这确实有效,但我相信倒数第二行
    before==1
    应该是
    before==0
    ?您尝试了什么?尝试差异年-月日期变量(在
    date
    帮助文件下查找
    ym()
    )。