在数据步参数中使用宏变量
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;
我正在尝试编写带有参数的微型程序来备份企业指南中的数据集 (名称+日期+时间)。这是代码:
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;