提示:日期,%Sysfunc(年(& myvar。));

时间:2018-05-09 14:23:35

标签: date variables macros sas prompt

我有一个SAS EG 7.1程序,可以按月生成报告。旧流程非常手动,其中用户要求使用当前月末(Date9。)更新宏变量(& date。)。

    %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.));

&amp; year(4位数)和&amp; month。 (1或2位数,取决于月份)稍后在代码中用作文件名的组成部分,以获取当前月份的表格:

    FROM lib.great_table_loc_&year._&month.;

我试图通过提示用户选择当前的月末日期来使程序动态化。 提示正在运行,并输出date9。格式。

然后我尝试使用宏变量&amp; 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。,输入&amp; prompt_date。然后把(,n。)使值数字 - 仍然没有。

有没有人遇到过类似的问题? 关于如何获得我想要的任何提示?

谢谢!

1 个答案:

答案 0 :(得分:3)

你有:

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

两个问题。

  1. 您指定&amp; Date但不使用它。
  2. 提示日期为DDMONYYYY(date9。)。 SAS会将​​其视为一个字符串。您需要引号和d才能使其成为日期。
  3. 尝试

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