我尝试使用SAS来计算在计算中使用预测值的x个周期的移动平均值。例如,如果我有一个包含10个变量观测值的数据集,我想做3个月的移动平均线。第一个预测值应该是最后3个观测值的平均值,第二个预测值应该是最后两个观测值的平均值和第一个预测值。
答案 0 :(得分:0)
如果你有这样的数据:
input t1 left join input t2
on t1.product = t2.product
and t2.period between intnx('month',t1.period,-2,'b') and t1.period
group by t1.product, t1.period, t1.value
您可以将连接输入表本身保留为条件:
t1.value
使用此功能,您将avg(t2.value)
作为当前值,ifn()
作为3个月平均值。要计算2个月的平均值,使用avg(ifn( t2.period >= intnx('month',t1.period,-1,'b'),t2.value,. ))
函数将每个值更早的时间更改为previos period到missing值:
proc sql;
create table want as
select t1.product, t1.period, t1.value as currentValue,
ifn(count(t2.period)>1,avg(ifn( t2.period >= intnx('month',t1.period,-1,'b'),t2.value,. )),.) as twoMonthsAVG,
ifn(count(t2.period)>2,avg(t2.value),.) as threeMonthsAVG
from input t1 left join input t2
on t1.product = t2.product
and t2.period between intnx('month',t1.period,-2,'b') and t1.period
group by t1.product, t1.period, t1.value
;
quit;
完整代码可能如下所示:
count(t2.perion)