Невозможно преобразовать аргумент в формат даты - PullRequest
0 голосов
/ 11 июня 2019

Итак, у меня есть макрос, который занимает sas месяц в формате yymmn6 для вычисления следующих 2 месяцев.

%macro pull(yymm);
%let month1=%sysfunc(inputn(&yymm.,yymmn6.));
%let month2=%sysfunc(inputn(intnx('month',&month1.,1),yymmn6.));
%let month3=%sysfunc(inputn(intnx('month',&month1.,2),yymmn6.));
%put &month1 &month2 &month3;
%mend;
%pull(201807);

Я не могу понять ошибку в коде, потому что я получаю следующеепредупреждение:

Argument 1 to function INPUTN referenced by the %SYSFUNC or %QSYSFUNC macro function is out of range.

Когда я проверяю журнал, & month1 приходит как 21366, что в идеале должно быть 201807. Может кто-нибудь, пожалуйста, помогите мне здесь?

1 Ответ

2 голосов
/ 11 июня 2019

Каждая функция нуждается в собственной оболочке% SYFUNC (), поэтому ваш код передает буквенную строку INTNX( в функцию INPUTN ().Также вам не нужно добавлять кавычки вокруг строковых значений в макросе.Поэтому удалите кавычки вокруг MONTH.

Итак, сначала преобразуйте строку YYYYMM в дату.Затем передайте это значение даты в функцию INTNX ().Вы можете использовать дополнительный второй параметр функции %SYSFUNC(), чтобы указать, какой формат использовать при преобразовании результата функции в строку.

%macro pull(yymm);
%local date;
%let date=%sysfunc(inputn(&yymm,yymmn6));
%let month1=%sysfunc(intnx(month,&date,0),yymmn6.);
%let month2=%sysfunc(intnx(month,&date,1),yymmn6.);
%let month3=%sysfunc(intnx(month,&date,2),yymmn6.);
%put &month1 &month2 &month3;
%mend;
%pull(201807);

Результаты:

201807 201808 201809
...