在Stata

时间:2015-09-10 13:00:21

标签: loops count stata

我试图计算一些经济变量(我们称之为X)的滚动标准偏差超过10年。我使用面板数据集,其中包含500家公司(id1-id500)和20年(1995-2015)。我必须计算每年和每家公司的标准差,从2006年开始滚动(滚动窗口超过10年)。我已经使用以下代码进行了管理:

tsset id year
rolling sd_X=r(sd), window(10) keep(year) saving(sd_X, replace): sum X
merge 1:1 id year using "sd_X.dta"

这段代码工作正常,但我有一个小问题:X变量包含很多缺失值,我需要超过3个X变量的观察来计算标准偏差。我的解决方案是使用-rolling-计算标准偏差(如前所示),如果使用少于3次观察计算,则用缺失值替换所有标准偏差。

我尝试编写一个循环,使用滚动窗口计算每个公司和年份前10年期间的所有非缺失值,但遗憾的是它不能很好地运行:

   gen count1 = 0
   forvalues i = 1995/2015 {
   forvalue z = 1/500 {
   count if year == `i' & id == `z' & X != . 
   replace count1 = count1[_n-1] + r(N)
    }
    }

结果,我只丢失了count1的值。 我想得到的结果必须如下:

 firm   year     X      count1
  z      i

 id1   1995    m.v.       0
 ........................
 id1   2011    m.v.       0
 id1   2012     1         0
 id1   2013     1         1
 id1   2014     21        2
 id1   2015     4         3
 ........................
 id2   1995     m.v.      0
 ........................
 id2   2011     m.v.      0
 id2   2012     m.v.      0
 id2   2013     m.v.      0
 id2   2014      42       1
 id2   2015      46       2
 and so on...

有人知道这样做的好方法吗?

0 个答案:

没有答案