在stata中为面板数据中的剧集生成计数器变量
Generation of a counter variable for episodes in panel data in stata
我正在尝试生成一个计数器变量来描述面板数据中时间事件的持续时间。
我正在使用看起来像这样的长格式数据:
clear
input byte id int time byte var1 int aim1
1 1 0 .
1 2 0 .
1 3 1 1
1 4 1 2
1 5 0 .
1 6 0 .
1 7 0 .
2 1 0 .
2 2 1 1
2 3 1 2
2 4 1 3
2 5 0 .
2 6 1 1
2 7 1 2
end
我想生成一个像 aim1
这样的变量,它在 var1==1
时以值 1 开始,并在 var1
仍然是每个 ID 的每个后续观察中计算一个单元等于 1。对于 var1!=1
、aim1
应包含缺失值的每个观察值。
我已经尝试使用 rangestat (count)
来解决问题,但是创建的变量不会在每一集重新开始计数:
ssc install rangestat
gen var2=1 if var1==1
rangestat (count) aim2=var2, interval(time -7 0) by (id)
这里有两种方法:(1) 从第一原则开始,但请参阅 this paper for more 和 (2) 使用来自 SSC 的 tsspell
。
clear
input byte id int time byte var1 int aim1
1 1 0 .
1 2 0 .
1 3 1 1
1 4 1 2
1 5 0 .
1 6 0 .
1 7 0 .
2 1 0 .
2 2 1 1
2 3 1 2
2 4 1 3
2 5 0 .
2 6 1 1
2 7 1 2
end
bysort id (time) : gen wanted = 1 if var1 == 1 & var1[_n-1] != 1
by id: replace wanted = wanted[_n-1] + 1 if var1 == 1 & missing(wanted)
tsset id time
ssc inst tsspell
tsspell, cond(var1 == 1)
list, sepby(id _spell)
+---------------------------------------------------------+
| id time var1 aim1 wanted _seq _spell _end |
|---------------------------------------------------------|
1. | 1 1 0 . . 0 0 0 |
2. | 1 2 0 . . 0 0 0 |
|---------------------------------------------------------|
3. | 1 3 1 1 1 1 1 0 |
4. | 1 4 1 2 2 2 1 1 |
|---------------------------------------------------------|
5. | 1 5 0 . . 0 0 0 |
6. | 1 6 0 . . 0 0 0 |
7. | 1 7 0 . . 0 0 0 |
|---------------------------------------------------------|
8. | 2 1 0 . . 0 0 0 |
|---------------------------------------------------------|
9. | 2 2 1 1 1 1 1 0 |
10. | 2 3 1 2 2 2 1 0 |
11. | 2 4 1 3 3 3 1 1 |
|---------------------------------------------------------|
12. | 2 5 0 . . 0 0 0 |
|---------------------------------------------------------|
13. | 2 6 1 1 1 1 2 0 |
14. | 2 7 1 2 2 2 2 1 |
+---------------------------------------------------------+
tsspell
的方法非常接近您的要求,除了 (a) 它的计数器(默认情况下 _seq
在拼写时为 0,但 replace _seq = . if _seq == 0
得到what you ask (b) 它的辅助变量(默认_spell
和_end
)在很多问题中很有用,你必须先安装tsspell
才能和ssc install tsspell
一起使用。
我正在尝试生成一个计数器变量来描述面板数据中时间事件的持续时间。 我正在使用看起来像这样的长格式数据:
clear
input byte id int time byte var1 int aim1
1 1 0 .
1 2 0 .
1 3 1 1
1 4 1 2
1 5 0 .
1 6 0 .
1 7 0 .
2 1 0 .
2 2 1 1
2 3 1 2
2 4 1 3
2 5 0 .
2 6 1 1
2 7 1 2
end
我想生成一个像 aim1
这样的变量,它在 var1==1
时以值 1 开始,并在 var1
仍然是每个 ID 的每个后续观察中计算一个单元等于 1。对于 var1!=1
、aim1
应包含缺失值的每个观察值。
我已经尝试使用 rangestat (count)
来解决问题,但是创建的变量不会在每一集重新开始计数:
ssc install rangestat
gen var2=1 if var1==1
rangestat (count) aim2=var2, interval(time -7 0) by (id)
这里有两种方法:(1) 从第一原则开始,但请参阅 this paper for more 和 (2) 使用来自 SSC 的 tsspell
。
clear
input byte id int time byte var1 int aim1
1 1 0 .
1 2 0 .
1 3 1 1
1 4 1 2
1 5 0 .
1 6 0 .
1 7 0 .
2 1 0 .
2 2 1 1
2 3 1 2
2 4 1 3
2 5 0 .
2 6 1 1
2 7 1 2
end
bysort id (time) : gen wanted = 1 if var1 == 1 & var1[_n-1] != 1
by id: replace wanted = wanted[_n-1] + 1 if var1 == 1 & missing(wanted)
tsset id time
ssc inst tsspell
tsspell, cond(var1 == 1)
list, sepby(id _spell)
+---------------------------------------------------------+
| id time var1 aim1 wanted _seq _spell _end |
|---------------------------------------------------------|
1. | 1 1 0 . . 0 0 0 |
2. | 1 2 0 . . 0 0 0 |
|---------------------------------------------------------|
3. | 1 3 1 1 1 1 1 0 |
4. | 1 4 1 2 2 2 1 1 |
|---------------------------------------------------------|
5. | 1 5 0 . . 0 0 0 |
6. | 1 6 0 . . 0 0 0 |
7. | 1 7 0 . . 0 0 0 |
|---------------------------------------------------------|
8. | 2 1 0 . . 0 0 0 |
|---------------------------------------------------------|
9. | 2 2 1 1 1 1 1 0 |
10. | 2 3 1 2 2 2 1 0 |
11. | 2 4 1 3 3 3 1 1 |
|---------------------------------------------------------|
12. | 2 5 0 . . 0 0 0 |
|---------------------------------------------------------|
13. | 2 6 1 1 1 1 2 0 |
14. | 2 7 1 2 2 2 2 1 |
+---------------------------------------------------------+
tsspell
的方法非常接近您的要求,除了 (a) 它的计数器(默认情况下 _seq
在拼写时为 0,但 replace _seq = . if _seq == 0
得到what you ask (b) 它的辅助变量(默认_spell
和_end
)在很多问题中很有用,你必须先安装tsspell
才能和ssc install tsspell
一起使用。