Это прекрасный пример использования функции intnx()
. intnx()
будет вашим лучшим другом, когда дело доходит до выравнивания дат.
В традиционном календаре год начинается с 01JAN
. В вашем календаре год начинается с 01JUN
. Разница между этими двумя датами составляет ровно 6 месяцев. Мы хотим сместить нашу дату так, чтобы год начался 01JUN
. Это позволит вам взять часть года из даты и определить, в каком году вы находитесь в новом календаре.
data want;
format current_cal_year
current_new_year year4.
;
current_cal_year = intnx('year', '01JUN2018'd, 0, 'B');
current_new_year = intnx('year.6', '01JUN2018'd, 1, 'B');
run;
Обратите внимание, что мы сместились current_new_year
на один год. Чтобы проиллюстрировать почему, давайте посмотрим, что произойдет, если мы не сдвинем его на один год.
data want;
format current_cal_year
current_new_year year4.
;
current_cal_year = intnx('year', '01JUN2018'd, 0, 'B');
current_new_year = intnx('year.6', '01JUN2018'd, 0, 'B');
run;
current_new_year
показывает 2018, но мы действительно в 2019. В течение 5 месяцев в году это значение будет правильным. С июня по декабрь значение года будет неверным. При смещении на один год у нас всегда будет правильный год, связанный с этим значением даты. Посмотрите на это с разными месяцами года, и вы увидите, что часть года остается верной во времени.
data want;
format cal_month date9.
cal_year
new_year year4.
;
do i = 0 to 24;
cal_month = intnx('month', '01JAN2016'd, i, 'B');
cal_year = intnx('year', cal_month, i, 'B');
new_year = intnx('year.6', cal_month, i+1, 'B');
year_not_same = (year(cal_year) NE year(new_year) );
output;
end;
drop i;
run;