计算SAS中的移动平均线

时间:2017-06-19 08:09:33

标签: sas moving-average

我对SAS比较陌生,需要根据变量计算移动平均线。 我已经做了一些示例代码来解释:

DATA testData;
input shop year sales;
datalines;
01 01 20000
01 02 23500
01 03 21020
02 01 23664
02 02 15420
02 03 14200
03 01 25623
03 02 12500
03 03 20030
;
run; 

DATA average;
retain y 0;
set testData;
y = y + sales;
avg = y/_n_;
run;

这给了我所有销售的平均值。我想要做的只是获得每个商店的平均值,并根据去年,然后是该商店的所有年份。然后再次开始下一个商店。希望这有点儿意义。我不希望任何商店1年的移动平均线影响商店2的平均值。

1 个答案:

答案 0 :(得分:2)

您需要做的是每次开始计算新店时重置平均值。您还需要使用自己的记录计数器。以下是改进的代码:

DATA testData;
    input shop year sales;
    datalines;
01 01 20000
01 02 23500
01 03 21020
02 01 23664
02 02 15420
02 03 14200
03 01 25623
03 02 12500
03 03 20030
;
run;

PROC SORT DATA=WORK.TESTDATA
    OUT=Sorted;
    BY shop year;
RUN;

DATA average (drop=n);
    set Sorted;
    by shop; 
    if first.shop then
        do;
            y = 0;
            n = 0;
        end;
    n + 1;
    y + sales;
    avg = y/n;
run;

另外,请注意保留声明不是必要的,如果您表达的总和声明表示为“i + y”而不是“i = i + y”。

有关分组依据的详细信息,请参阅此SAS Support doc

结果:

Result