在一个区间内定义组
Defining groups within an interval
在 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
,它为焦点 ID
三天内(之前或之后)发生的所有 IDs
提供唯一变量。
我首先想识别给定 ID
三天内 window 内的 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
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 ...
)。
在 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
,它为焦点 ID
三天内(之前或之后)发生的所有 IDs
提供唯一变量。
我首先想识别给定 ID
三天内 window 内的 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
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 ...
)。