计算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。
结果:
我对 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。
结果: