【问题标题】:Using macro variables in datastep arguments在数据步参数中使用宏变量
【发布时间】:2016-08-22 11:19:49
【问题描述】:

我正在尝试编写带有参数的微型程序来备份企业指南中的数据集(name+date+time)。代码如下:

data &WhatLib..&WhatTable%str(_)&SYSDATE.%sysfunc(tranwrd(%str(&SYSTIME.),:,_)) ;
set &WhatLib..&WhatTable ;
run;

WhatLib(默认值工作)和WhatTable(默认值_PRODSAVAIL) - 参数。好吧,我得到了截图中的结果:

我添加了几个字符串来检查宏变量值:

%put &WhatLib..&WhatTable%str(_)&SYSDATE.%sysfunc(tranwrd(%str(&SYSTIME.),:,_));
%put &WhatLib..&WhatTable;

结果在日志中是:

工作._PRODSAVAIL_22AUG1613_28

工作._PRODSAVAIL

然后,我将这段代码封装到宏定义中:

%macro TEST();
...
<--same code-->
...
%mend TEST;

%TEST();

但结果是一样的。 如果您指出我没有意识到的错误或功能,我将不胜感激。

【问题讨论】:

    标签: sas sas-macro enterprise-guide datastep


    【解决方案1】:

    %STR(_) 在这里引起了问题。您无需将_ 放入%STR() 宏函数中。下划线是数据集中名称的正确部分。

    此外,最好将%SYSFUNC() 与TIME() 和DATE() 函数一起使用以获得实际时间和日期。不是 SAS 开始时间和日期:

    data &WhatLib..&WhatTable._%sysfunc(date(),date9.)_%sysfunc(tranwrd(%sysfunc(time(),hhmm5.),:,_));
       set &WhatLib..&WhatTable;
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      相关资源
      最近更新 更多