使用Stata扩展连续总和

时间:2018-02-14 02:40:05

标签: stata

我有一个小组。每个ID都是一个人。

如果一个人的A状态从1变为0,则

lose_A为1.

我只有ID,年,A,lost_A和A_upgrade。

我想制作长度和长度。

长度只是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 个答案:

答案 0 :(得分:1)

感谢明确的问题和数据示例。

这里的主要想法是认为你的主变量的法术或运行为1.所以你将问题分为(1)为每种法术的开始创建标记和(2)在每个法术的内部向上计数拼写。

http://www.stata-journal.com/sjpdf.html?articlenum=dm0029

中有更多讨论

dm0029tsspell(关于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 |
     +-------------------------------------------------------------------------+