Квартальный вариант SAS intnx

извините, наверное, очень простой вопрос, но я не могу найти на него ответ.

Скажем, мы хотим создать таблицу, содержащую 4 квартала назад по сравнению с предыдущим месяцем:

%macro asd;

%let today = %sysfunc(today());

%let quarter_count_back = 4;

%let first_quarter = %sysfunc(intnx(month,&today.,-1));

proc sql;
create table quarters
(
Quarters num informat = date9. format = date9.
);
insert into quarters

%do i = 0 %to -&quarter_count_back.+1 %by -1;

values(%sysfunc(intnx(quarter,&first_quarter.,&i.)))

%end;
;
quit;


run;
%mend asd;
%asd;
run;

Этот код отлично работает и создает таблицу, которая начинается с апреля 2016 года и возвращается во времени на квартал. Однако, если я изменю число в строке «first_quarter» на -2, -3 и т. д., код всегда начинается с JAN2016, что для меня просто не имеет никакого смысла! Например:

%let first_quarter = %sysfunc(intnx(month,&today.,-2));

Кажется логичным, что если я помещу эту строку в код, таблица должна начинаться с МАР 2016 и возвращаться на квартал, но это не так, она начинается с ЯНВ 2016.

Любые идеи о том, что я делаю неправильно здесь?

Спасибо!


person Kvadich    schedule 02.05.2016    source источник
comment
Посмотрите, что такое четвертый параметр для INTNX и поведение по умолчанию. Вы хотите 's' или то же самое.   -  person Reeza    schedule 02.05.2016


Ответы (1)


Выравнивание по умолчанию для функции INTNX — это начало интервала. Если вы хотите вернуться на 3 месяца назад, это отличается от кварталов. Вы можете настроить их, посмотрев на четвертый параметр функции INTNX, которая управляет выравниванием. Варианты:

  • Такой же
  • Начало
  • Конец

Если вы хотите три месяца, попробуйте интервал MONTH.3 вместо квартала.

http://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#p10v3sa3i4kfxfn1sovhi5xzxh8n.htm

person Reeza    schedule 02.05.2016
comment
Спасибо! Однако работало только «то же самое» выравнивание. Я не уверен, но почему выравнивание «конец» не сработало? Кажется логичным вернуться к этому... Кстати, квартал — это не то же самое, что 3 месяца? - person Kvadich; 03.05.2016
comment
Насколько я понимаю, кварталы - это определенные интервалы - январь-март, тогда как 3 месяца могут быть любыми 3 месяцами, например, с февраля по апрель. - person Reeza; 03.05.2016