У меня есть программа SAS EG 7.1, которая генерирует отчеты ежемесячно.Старый процесс был очень ручным, когда пользователям, среди прочего, предлагалось обновить макропеременную (& date.) С текущим концом месяца (Date9.).
%let Date = '28feb2018'd; /* <--- Input the date to be reported */
/* Generate the year and the month based on the input date */
%let year = %sysfunc(year(&date.));
%let month = %sysfunc(month(&date.));
The & year (4-значный) и & month.(1- или 2-значная в зависимости от месяца) позже используются в коде в качестве компонентов имени файла для выбора таблиц текущего месяца:
FROM lib.great_table_loc_&year._&month.;
Я пытаюсь сделать программу динамической, запрашиваяПользователь выбрал текущую дату окончания месяца.Подсказка работает, и выводит date9.формат.
Затем я попытался использовать макропеременную & Prompt_date.в% sysfunc:
%let Date = '&prompt_date.';
%let year = %sysfunc(year(&prompt_date.));
%let month = %sysfunc(month(&prompt_date.));
При выполнении я получаю следующие сообщения об ошибках:
1)
35 %let year = %sysfunc(year(&prompt_date.));
ERROR: Argument 1 to function YEAR referenced by the %SYSFUNC or
%QSYSFUNC macro function is not a number.
ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC
argument list. Execution of %SYSCALL statement or %SYSFUNC
or %QSYSFUNC function reference is terminated.
36 %let month = %sysfunc(month(&prompt_date.));
ERROR: Argument 1 to function MONTH referenced by the %SYSFUNC or
%QSYSFUNC macro function is not a number.
ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC
argument list. Execution of %SYSCALL statement or %SYSFUNC
or %QSYSFUNC function reference is terminated.
2)
118 lib.great_table_loc_._.
_
22
200
ERROR 22-322: Syntax error, expecting one of the following: a name, ;,
(, ',', ANSIMISS, AS, CROSS, EXCEPT, FULL, GROUP, HAVING,
INNER, INTERSECT, JOIN, LEFT, NATURAL, NOMISS, ORDER, OUTER,
RIGHT, UNION, WHERE.
ERROR 200-322: The symbol is not recognized and will be ignored.
Я попытался создать отдельное поле для месяца и года, отформатированное в YYMMN6., Введите & prompt_date.а затем поставить (, n.), чтобы сделать значение числовым - все равно ничего.
Кто-нибудь сталкивался с подобной проблемой?Любые советы о том, как получить то, что я хочу?
Спасибо!