我试图计算一些经济变量(我们称之为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...
有人知道这样做的好方法吗?