在datastep参数

时间:2016-08-22 11:19:50

标签: sas sas-macro enterprise-guide datastep

我尝试使用参数编写带有参数的小程序来备份企业指南中的数据集(名称+日期+时间)。这是代码:

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

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

first version of code result

我添加了一些字符串来检查宏变量值:

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

结果是在日志中:

  

work._PRODSAVAIL_22AUG1613_28

     

work._PRODSAVAIL

然后,我将这段代码包装成宏观防御:

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

%TEST();

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

1 个答案:

答案 0 :(得分:2)

此处%STR(_)导致问题。您不需要将_放入%STR()宏功能中。 Underscore是数据集中名称的正确部分。

最好使用%SYSFUNC() TIME()DATE()函数来确定实际时间和日期。不是SAS的开始时间和日期:

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