计算SAS中的移动平均线

Calculating moving averages in SAS

我对 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 的平均值。

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

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

结果: