在Stata中包含以下数据
ID Date
1 1/1/2010
2 1/1/2010
3 1/4/2010
4 1/5/2010
5 1/8/2010
6 1/10/2010
7 1/11/2010
我正在尝试创建一个变量Dummyi
,为焦点IDs
的三天(之前或之后)发生的所有ID
提供一个唯一变量。
我首先想要识别给定ID
的三天窗口内的ID,然后为所有这些ID分配一个唯一的编号。
qui forvalues i = 1/`=_N' {
gen Dummy`i'
replace Dummy`i' = `i' if Date <= (Date[`i']-3) & ID == `i'
}
这种方法已经实现,但缺少ID
值,它们并不是整齐顺序的,并且这并未考虑之前发生的IDs
。最后,多个IDs
分为两组(例如ID==5
),我不确定如何在不创建单独的Dummy
变量的情况下分离,这很好。
结果数据应如下所示。
ID Date Dummy1 Dummy2 Dummy3 Dummy4 Dummy5 Dummy6 Dummy7
1 1/1/2010 1 1 1 0 0 0 0
2 1/1/2010 1 1 1 0 0 0 0
3 1/4/2010 1 1 1 1 0 0 0
4 1/5/2010 0 0 1 1 1 0 0
5 1/8/2010 0 0 0 1 1 1 1
6 1/10/2010 0 0 0 0 1 1 1
7 1/11/2010 0 0 0 0 1 1 1
答案 0 :(得分:1)
clear
set more off
*----- example data -----
input ///
id str10 date
1 "1/1/2010"
2 "1/1/2010"
3 "1/4/2010"
4 "1/5/2010"
5 "1/8/2010"
6 "1/10/2010"
7 "1/11/2010"
end
gen date2 = date(date, "MDY")
format %td date2
drop date
list
*----- what you want -----
isid id
levelsof id, local(levid)
forvalues i = 1/`=_N' {
local lid : word `i' of `levid'
gen ind`lid' = inrange(date2[`i'], date2 - 3, date2 + 3)
}
list, sep(0)
levelsof
我使用的id
是一些不规则的序列。指标变量(您称之为 dummy )根据相应的id
命名。
如果您没有使用扩展宏功能(help extended_fcn
)的经验,请参阅local lid : word ...
。