计算SAS中的移动平均线

时间:2016-03-09 15:31:55

标签: sas moving-average

我尝试使用SAS来计算在计算中使用预测值的x个周期的移动平均值。例如,如果我有一个包含10个变量观测值的数据集,我想做3个月的移动平均线。第一个预测值应该是最后3个观测值的平均值,第二个预测值应该是最后两个观测值的平均值和第一个预测值。

1 个答案:

答案 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)

如果我没有足够的记录来计算度量,我还添加了Ops(my, my)条件来返回缺失值。我的结果集如下所示: enter image description here