Я пытаюсь использовать SAS для вычисления скользящей средней для x числа периодов, в которых используются расчетные значения. Например, если у меня есть набор данных с десятью наблюдениями для переменной, и я хотел бы сделать 3-месячную скользящую среднюю. Первое значение прогноза должно быть в среднем по последним 3 наблюдениям, а второе прогнозируемое значение должно быть в среднем по последним двум наблюдениям и первому прогнозируемому значению.Вычисление скользящей средней в SAS
0
A
ответ
0
Если у вас есть, например, такие данные:
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;
Я также добавил count(t2.perion)
условие вернуть отсутствующие значения, если у меня недостаточно записей для вычисления меры. Мой результирующий набор выглядит так:
См. Ответ Stu здесь: http://stackoverflow.com/questions/32696053/sas-standard-deviation-on-unfixed-rolling-window. Этот вопрос касается расчета скользящего стандартного отклонения, но также может быть достигнуто скользящее среднее. – DomPazz