我尝试使用参数编写带有参数的小程序来备份企业指南中的数据集(名称+日期+时间)。这是代码:
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;
结果是在日志中:
work._PRODSAVAIL_22AUG1613_28
work._PRODSAVAIL
然后,我将这段代码包装成宏观防御:
%macro TEST();
...
<--same code-->
...
%mend TEST;
%TEST();
但结果是一样的。 如果您指定我没有意识到的错误或功能,我将不胜感激。
答案 0 :(得分:2)
此处%STR(_)
导致问题。您不需要将_
放入%STR()
宏功能中。 Underscore是数据集中名称的正确部分。
最好使用%SYSFUNC()
TIME()
和DATE()
函数来确定实际时间和日期。不是SAS的开始时间和日期:
data &WhatLib..&WhatTable._%sysfunc(date(),date9.)_%sysfunc(tranwrd(%sysfunc(time(),hhmm5.),:,_));
set &WhatLib..&WhatTable;
run;