我有一个面板。每个ID都是一个人。
如果一个人的 A 状态从 1 变为 0,则 loss_A 为 1。
我只有 ID、年份、A、lose_A 和 A_upgrade。
我想制作长度和长度2。
长度只是 A 的连续 1 的数量。
length2 是相似的,但只有一个区别:它在 A_upgrade 为 1 的那一年之后立即回到 1。
ID year A lose_A A_upgrade length length2
1 3 1 1 0 1 1
1 4 0 0 0 0 0
1 5 1 0 0 1 1
1 6 1 0 1 2 2
1 7 1 0 0 3 1
2 4 0 0 0 0 0
2 5 1 0 0 1 1
2 6 1 0 0 2 2
2 7 0 1 0 0 0
我做了
bysort ID (year): gen sumA=sum(A)
作为长度和长度2的垫脚石。但我不知道接下来要做什么。
感谢您提供明确的问题和数据示例。
这里的主要思想是认为您的主要变量为 1 的法术或运行。因此您将问题分为(1)为每种法术的开始创建标记和(2)在每个法术中向上计数。
http://www.stata-journal.com/sjpdf.html?articlenum=dm0029 中有更多讨论
dm0029
和tsspell
(SSC 上的一个程序)是其他不可预测的搜索词,可以在 Statalist 上找到许多相关帖子。
clear
input ID year A lose_A A_upgrade length length2
1 3 1 1 0 1 1
1 4 0 0 0 0 0
1 5 1 0 0 1 1
1 6 1 0 1 2 2
1 7 1 0 0 3 1
2 4 0 0 0 0 0
2 5 1 0 0 1 1
2 6 1 0 0 2 2
2 7 0 1 0 0 0
end
* start of each spell is 1, others 0
bysort ID (year) : gen Length = A == 1 & (_n == 1 | A[_n-1] == 0)
* count 2, 3, ... within spells
by ID : replace Length = Length[_n-1] + 1 if A == 1 & Length == 0
* second variable is a twist on the first
bysort ID (year) : gen Length2 = A == 1 & (_n == 1 | A[_n-1] == 0 | A_upgrade[_n-1] == 1)
by ID : replace Length2 = Length2[_n-1] + 1 if A == 1 & Length2 == 0
list, sepby(ID)
+-------------------------------------------------------------------------+
| ID year A lose_A A_upgr~e length length2 Length Length2 |
|-------------------------------------------------------------------------|
1. | 1 3 1 1 0 1 1 1 1 |
2. | 1 4 0 0 0 0 0 0 0 |
3. | 1 5 1 0 0 1 1 1 1 |
4. | 1 6 1 0 1 2 2 2 2 |
5. | 1 7 1 0 0 3 1 3 1 |
|-------------------------------------------------------------------------|
6. | 2 4 0 0 0 0 0 0 0 |
7. | 2 5 1 0 0 1 1 1 1 |
8. | 2 6 1 0 0 2 2 2 2 |
9. | 2 7 0 1 0 0 0 0 0 |
+-------------------------------------------------------------------------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句