Подсказка: дата,% Sysfunc (год (& myvar.)); - PullRequest
0 голосов
/ 09 мая 2018

У меня есть программа 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.), чтобы сделать значение числовым - все равно ничего.

Кто-нибудь сталкивался с подобной проблемой?Любые советы о том, как получить то, что я хочу?

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

У вас есть:

%let Date = '&prompt_date.'; 
%let year = %sysfunc(year(&prompt_date.)); 
%let month = %sysfunc(month(&prompt_date.));

Два выпуска.

  1. Вы назначаете & Дата, но не используете ее.
  2. Дата запроса: ДДМОНГГГГ (дата9.). SAS увидит это как строку. Вам нужны кавычки и d, чтобы сделать дату.

Попробуйте

%let year = %sysfunc(year("&prompt_date."d)); 
%let month = %sysfunc(month("&prompt_date."d));
...