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

Fel*_*x H 0 stata

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

id    start     end
1     01072014  05072014
1     05012014  06012015
Run Code Online (Sandbox Code Playgroud)

我想得到

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
Run Code Online (Sandbox Code Playgroud)

这样我最终可以重塑我的数据,将所有观察结果排除在白天范围之外。我的想法是使用带有 stata 日期格式的循环,如下所示:

foreach i in *stataformat startdate*/*stataformat enddate* {
generate d_`i'=1 if `i'>=start & `i'<=end
}
Run Code Online (Sandbox Code Playgroud)

但是这种方法的问题是我的变量名称总是难以理解。那么您是建议另一种方法,还是知道如何将包含 stata 日期代码的变量重命名为“可理解”的名称?非常感谢!

Maa*_*uis 5

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

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
Run Code Online (Sandbox Code Playgroud)

但是,由于这可能是生存分析数据,并且您已经stset是数据集(或者您将要使用),因此您可以使用stsplit.