用Stata扩展连续和
我有一个小组。每个ID都是一个人 如果某人的A状态从1更改为0,则lose_A为1 我只有ID、年份、A、丢失A和升级 我想做长度和长度2 长度只是A的连续1s数 length2很相似,但只有一个区别:在一个_升级为1的年份之后,它又回到了1用Stata扩展连续和,stata,Stata,我有一个小组。每个ID都是一个人 如果某人的A状态从1更改为0,则lose_A为1 我只有ID、年份、A、丢失A和升级 我想做长度和长度2 长度只是A的连续1s数 length2很相似,但只有一个区别:在一个_升级为1的年份之后,它又回到了1 ID year A lose_A A_upgrade length length2 1 3 1 1 0 1 1 1 4 0 0 0 0
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)在每种法术中向上计数 内部有更多的讨论
dm0029
和tsspell
(SSC上的一个程序)是在StatList上查找许多相关帖子的不可预测的搜索词
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 |
+-------------------------------------------------------------------------+