我想从一些开始和结束日期创建虚拟变量,如果在范围内,则取值为 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 日期代码的变量重命名为“可理解”的名称?非常感谢!
如果我想从第一原则开始,我将从长格式数据开始:
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.