0
我正在嘗試使用SAS計算在計算中使用預測值的x個時期的移動平均值。例如,如果我有一個包含10個變量觀測值的數據集,並且我想要做一個3個月的移動平均線。第一個預測值應該是最後3個觀測值的平均值,第二個預測值應該是最後兩個觀測值的平均值和第一個預測值。計算SAS中的移動平均數
我正在嘗試使用SAS計算在計算中使用預測值的x個時期的移動平均值。例如,如果我有一個包含10個變量觀測值的數據集,並且我想要做一個3個月的移動平均線。第一個預測值應該是最後3個觀測值的平均值,第二個預測值應該是最後兩個觀測值的平均值和第一個預測值。計算SAS中的移動平均數
如果你有這樣的示例數據:
data input;
infile datalines;
length product $10 period value 8;
informat period yymmdd10.;
format period yymmdd10.;
input product $ period value;
datalines;
car 2016-01-01 10
car 2015-12-01 20
car 2015-11-01 30
car 2015-10-01 40
car 2015-09-01 30
car 2015-08-01 15
;
run;
您可以留下參加輸入表本身有一個條件:
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)
爲3幾個月平均。爲了計算2個月平均變化每一個值的舊的然後previos期缺失值與ifn()
功能:
avg(ifn(t2.period >= intnx('month',t1.period,-1,'b'),t2.value,.))
全部代碼可能看起來是這樣的:
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;
請參閱Stu的答案:http://stackoverflow.com/questions/32696053/sas-standard-deviation-on-unfixed-rolling-window。該問題涉及移動標準偏差計算,但移動平均也可以完成。 – DomPazz