如何制作跨组的移动平均线?

How to make moving average across groups?

 | month| year   | amount|
|-------|--------|-------|
|  1    |  2010  |  26   | 
|  1    |  2010  |  26   |
|  2    |  2010  |  30   | 
|  3    |  2010  |  35   |
|  3    |  2010  |  35   | 

我需要弄清楚如何制作另一个变量,它将前一个月的金额 _n-1 和 _n 除以 2,有点像移动平均线。问题是我需要按月和年来做,因为有多个相同的月份和年份。还有其他不相关的变量,但这就是为什么我不能只删除重复项的原因。

例如,对于观察 5,我需要它是 (35+30+26) / 3

你的处方和你的例子根本不匹配。您的示例是本月和前两个月的 3 个月均值的平均值。你的处方是一个月和前一个月。

这里有一些技巧着重于您的处方的两种可能含义。

* Example generated by -dataex-. For more info, type help dataex
clear
input byte month int year byte amount
1 2010 26
1 2010 26
2 2010 30
3 2010 35
3 2010 35
end

gen mdate = ym(year, month)

format mdate %tm

foreach w in total mean count { 
    egen `w' = `w'(amount), by(mdate)
} 

gen wanted1 = (mean + mean[_n-1]) / 2  if mdate == mdate[_n-1] + 1
bysort mdate (wanted1) : replace wanted1 = wanted1[_n-1] if missing(wanted1)

gen wanted2 = (total + total[_n-1]) / (count + count[_n-1]) if mdate == mdate[_n-1] + 1 
bysort mdate (wanted2) : replace wanted2 = wanted2[_n-1] if missing(wanted2)

list, sepby(mdate)

     +----------------------------------------------------------------------------+
     | month   year   amount    mdate   total   mean   count   wanted1    wanted2 |
     |----------------------------------------------------------------------------|
  1. |     1   2010       26   2010m1      52     26       2         .          . |
  2. |     1   2010       26   2010m1      52     26       2         .          . |
     |----------------------------------------------------------------------------|
  3. |     2   2010       30   2010m2      30     30       1        28   27.33333 |
     |----------------------------------------------------------------------------|
  4. |     3   2010       35   2010m3      70     35       2      32.5   33.33333 |
  5. |     3   2010       35   2010m3      70     35       2      32.5   33.33333 |
     +----------------------------------------------------------------------------+