Stata:从开始和结束日期创建日期虚拟对象

时间:2014-07-22 12:48:03

标签: stata

我想从一些开始和结束日期创建虚拟变量,如果在范围内,则取值为1。例如,来自

id    start     end
1     01072014  05072014
1     05012014  06012015

我想得到

id    start     end       d_01012014  d_02012014 d_03012014 ... d_01052014 ... d_31122014
1     01012014  02012014  1           1          0              0              0
1     01052014  02052015  0           0          0              1              0

因此,我最终可以重塑我的数据,将所有观察结果从日期范围中删除。 我的想法是使用带有stata日期格式的循环,有点像这样:

foreach i in *stataformat startdate*/*stataformat enddate* {
generate d_`i'=1 if `i'>=start & `i'<=end
}

但是这个方法的问题是我的变量会有无可比拟的名字。那么你是建议另一种方法,还是想知道如何将包含stata日期代码的变量重命名为“可理解的”名称? 非常感谢!

1 个答案:

答案 0 :(得分:4)

如果我想从第一个原则开始,我将从长格式数据开始:

clear
input id  spell  str10 start   str10 end
      1   1      "01-07-2014"  "05-07-2014"
      1   2      "06-08-2014"  "06-01-2015"
end

gen start2 = date(start, "MDY")
gen end2 = date(end, "MDY")

format start2 %td
format end2 %td

sum start2
local min = r(min)
sum end2
local range = r(max) - `min' + 1

expand `range'
bys id spell : gen date = `min' + _n - 1
format date %td
keep if date >= start2 & date <= end2

但是,由于这可能是生存分析数据,而您已经stset数据集(或者您要去),您可以使用stsplit