在数据步参数中使用宏变量

Using macro variables in datastep arguments

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

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();

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

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

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

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