Звучит так, будто вы пытаетесь рассматривать числа, например 201 801, как если бы они представляли первый месяц в 2018 году, а затем добавляли число месяцев и генерировали число, используя тот же «стиль».
Если выесли вы хотите сделать это с помощью цифровых строк в коде макроса, вы можете создать макрос следующим образом:
%macro add_months_macro(date,months);
%sysfunc(intnx(month,%sysfunc(inputn(&date.01,yymmdd8)),&months),yymmn6)
%mend;
Но если вам нужен метод, который вы можете использовать со значениями переменных в обычных операторах SAS, тогда не используйте%sysfunc()
вообще.Вместо этого просто используйте макрос для генерации кода SAS для непосредственного вызова функций.
%macro add_months_sas(date,months);
input(put(intnx('month',input(cats(&date,'01'),yymmdd8.),&months),yymmn6.),6.)
%mend;
Так что ваше предложение WHERE будет выглядеть так:
WHERE %add_months_sas(T1.old_date, T1.x_months) > 201801
Но вы должны действительнопросто преобразуйте цифры в фактические даты, а затем используйте функцию INTNX()
для добавления месяцев. Тогда макросы вообще не нужны.
WHERE intnx('month',T1.old_date, T1.x_months) > '01JAN2018'd