我正在尝试使用x
的观察结果为每个id
组计算变量20
的滚动中位数绝对偏差(MAD)。
示例数据:
clear
set obs 100
generate id = _n
expand 100
generate x = rnormal()
bysort id: generate time = _n
我已经使用社区贡献命令rangestat
计算出滚动观测的中位数:
rangestat (median) x, by(id) interval(time -20 0) // this works
然后,我尝试将 community-contributed 命令tsegen
与egen
的函数mad()
一起使用来计算滚动中位数绝对偏差:
xtset id time
tsegen mad_x = mad(L(0/20).x) // this does not work
但是,最后一条命令导致以下错误:
x__000001__000002__000003__000004__000005__000006__000007__000008__000009__00000A__00000B__00000C__00000D__00000E__00000F__00000G__00
> 000H__00000I__00000J__00000K invalid name
r(198);
如何将“使用20个观测值”的要求传递给mad()
?
交叉发布于Statalist。
答案 0 :(得分:1)
我的首选解决方案已发布在Statalist here上。
另一种解决方案是添加滞后变量并手动计算MAD:
xtset id time
rangestat (median) x (count) x, by(id) interval(time -20 -1)
/* Add lagged values */
forvalues i = 1 / 20 {
generate double L`i'x = abs(L`i'.x - x_median)
}
/* Compute median of those /*
egen mad = rowmedian(L*x)