Stata:运行总和缺失值

时间:2016-01-25 15:25:18

标签: sum stata

我希望获得超过j的运行总和,例如对于行_nj=3,我想获得x[_n] + x[_n+1] + x[_n+2]

我想做以下几招:

    by grouping: gen foo = sum(log(x))
    by grouping: replace foo = foo - foo[_n - `y'] if _n > `y'

但是,这对于缺失值并不稳健。 sum()为缺失值生成0,如果要求总和的值中的至少一个为.,则需要累计总和为.。我将如何实现这一目标?

我也需要它来处理大型j,所以手动添加它们是不可行的。

2 个答案:

答案 0 :(得分:1)

有几种方法可以解释和解决它:

clear
set more off

input ///
id myvar
1 3 
1 4 
1 . 
1 8 
1 7
1 2
1 .
1 8
2 3 
2 4 
2 . 
2 8 
2 7
2 2
2 .
2 8
end

// this?
bysort id: gen s = cond(!missing(myvar), sum(myvar), .)

// or this? (or something else?)
clonevar s2 = s
bysort id: replace s2 = . if missing(s2[_n-1]) & _n > 1

list, sepby(id)

如果你想要其中任何一个,我不清楚。

答案 1 :(得分:0)

窃取Roberto的可重复示例(在帖子中没有这样做)另一种方法是使用tsegen(SSC),它必须与ssc inst tsegen一起安装。对tssetxtset数据集至关重要。 tsegen已经将语法连接到一个规定最小数量的非缺失参数的方法,这里所有这些都是。

clear
set more off

input ///
id myvar
1 3 
1 4 
1 . 
1 8 
1 7
1 2
1 .
1 8
2 3 
2 4 
2 . 
2 8 
2 7
2 2
2 .
2 8
end

sort id, stable
by id: gen t = _n 
tsset id t 

tsegen run = rowtotal(F(0/2).myvar, 3) 

list , sepby(id) 

     +----------------------+
     | id   myvar   t   run |
     |----------------------|
  1. |  1       3   1     . |
  2. |  1       4   2     . |
  3. |  1       .   3     . |
  4. |  1       8   4    17 |
  5. |  1       7   5     . |
  6. |  1       2   6     . |
  7. |  1       .   7     . |
  8. |  1       8   8     . |
     |----------------------|
  9. |  2       3   1     . |
 10. |  2       4   2     . |
 11. |  2       .   3     . |
 12. |  2       8   4    17 |
 13. |  2       7   5     . |
 14. |  2       2   6     . |
 15. |  2       .   7     . |
 16. |  2       8   8     . |
     +----------------------+