SAS - агрегирование ежедневного контента с событиями в тот же день - PullRequest
0 голосов
/ 04 марта 2012

У меня есть ежедневные данные, не полностью последовательные (то есть, не все дни присутствуют в неделе), и мне нужно преобразовать их в недельные итоги. Суть в том, что данные относятся к транзакциям, так что есть несколько наблюдений с одним и тем же днем. Использование следующей процедуры PROC EXPAND приводит к ошибке «Значение переменной ID FixtureDate = 04JAN2011 для номера наблюдения 2 в наборе данных RAW.VLCC2011 совпадает с предыдущим наблюдением»:

    PROC EXPAND DATA = raw.VLCC2011 OUT = raw.VLCC2011_wkly FROM= Day TO = Week;
    convert FixtureCargoSize/ OBSERVED=TOTAL method=aggregate;
    ID FixtureDate;
    run;

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Вот решение с proc sql. Вы также можете сделать что-то подобное с шагом данных.

proc sql;
 create table VLCC2011_wkly as
  select intnx('week', date, 0, 'end') as week, sum(FixtureCargoSize) as FixtureCargoSizeTotal
  from VLCC2011
  group by calculated week;
quit;

Функция intnx берет дату и переносит ее на другую дату. В этом случае она берет любую дату и перемещает ее в последний день недели. Суммирование по всем датам, имеющим одинаковую дату окончания недели, даст вам желаемое.

0 голосов
/ 07 марта 2012

Вот как я это решил (долгий путь):

data raw.VLCC2011_wkly;
set raw.VLCC2011;
IF FixtureDay < 8 then FixtureWeek = 1;
IF FixtureDay > 7 and FixtureDay < 15 then FixtureWeek = 2;
IF FixtureDay > 14 and FixtureDay < 23 then FixtureWeek = 3;
IF FixtureDay > 22 and FixtureDay < 30 then FixtureWeek = 4;
IF FixtureDay > 29 and FixtureDay < 32 then FixtureWeek = 5;
run;

proc sql;
create table raw.VLCC2011_wkly1 as
select FixtureMonth, FixtureDay, FixtureWeek, FixtureCargoSize,                                   sum(FixtureCargoSize) as CargoSizeTotal
from raw.VLCC2011_wkly 
group by FixtureMonth, FixtureWeek
Order by FixtureMonth, FixtureWeek, FixtureDay;
quit;
0 голосов
/ 05 марта 2012

Я не использовал PROC EXPAND. Однако сообщение об ошибке говорит о том, что ему не нравится, что для каждого значения идентификатора существует несколько наблюдений. Возможно, вам нужно предварительно обработать входной набор данных RAW.VLCC2011 так, чтобы на FIXTUREDATE было не более одного наблюдения.

...