Экстраполировать итоговую сумму из.LAST значения BY GROUP
Я пытаюсь выяснить, как создать промежуточную сумму, если все, что у нас есть, это общая сумма в переменной.LAST. Я создал образец набора данных, который должен немного прояснить, что я получаю после:
DATA SALES_DATA;
INPUT REGION_ID STORE_ID YEAR SALES;
DATALINES;
1 1 2000 .
1 1 2001 .
1 1 2002 .
1 1 2003 40
1 2 1977 .
1 2 1978 .
1 2 1979 .
1 2 1980 .
1 2 1981 12
2 3 1999 .
2 3 2000 .
2 3 2001 .
2 4 2002 17
3 4 1956 .
3 4 1957 22
;
Итак, как вы видите, у нас есть данные только в последний раз, когда магазин был в бизнесе, который включает в себя все продажи за предыдущие годы. Предполагая, что продажи были полностью линейными и складывались год за годом, как бы я сказал SAS захватить значение STORE_ID.LAST, а затем поделить его на количество лет, для которых у нас есть данные, для помещения его в поле SORE на STORE_ID.FIRST? Как только я выясню, как получить значение из последнего поля в первое, я планирую просто запустить обычную промежуточную сумму (после деления на число, которое может быть создано чем-то вроде:
DATA SALES;
SET SALES;
BY REGION_ID STORE_ID;
IF FIRST.STORE = 1 THEN
COUNT =0;
COUNT+1;
run;
Итак, в идеале финальный стол должен начинаться примерно так:
DATA SALES_DATA;
INPUT REGION_ID STORE_ID YEAR SALES;
DATALINES;
1 1 2000 10
1 1 2001 20
1 1 2002 30
1 1 2003 40
...
Я посмотрел в PROC EXPAND, но не смог заставить его работать в моем случае. Любые предложения приветствуются!
2 ответа
Небольшое улучшение кода Chris J, просто экстраполяция в proc sql. Не забудьте дать ему полную оценку:)
proc sql;
create table filled(rename=(sales_filled=sales)) as
select REGION_ID, STORE_ID, YEAR, max(SALES)/(max(YEAR)-min(YEAR)+1)*(YEAR-min(YEAR)+1) as sales_filled
from sales_data
group by REGION_ID, STORE_ID
order by REGION_ID, STORE_ID, Year;
quit;
Примечание: это работает, даже если годы не были последовательными (например, 2001 год почему-то отсутствует), потому что стоимость продаж заполняется на основе "отношения временного интервала" вместо "подсчета".
/* Сначала рассчитать объем продаж за год * / proc sql; создать таблицы как выберите region_id, store_id, сумму (продажи) / количество (год) как YEARLY_SALES из sales_data группировать по region_id, store_id упорядочить по region_id, store_id; уволиться; /* Слить обратно в исходные данные * / данные yearcalc; объединить sales_data средние продажи; by region_id store_id; если first.store_id, то n = 0; n + 1; NEW_SALES = n * YEARLY_SALES; брось n; бежать;