我对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的平均值。
答案 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。
结果: