有没有办法使用宏动态更改SAS ODS中的工作表名称?在宏内部,我有以下代码:
%DO N = 1 %TO &SQLOBS;
ODS TAGSETS.ExcelXP
OPTIONS(SHEET_NAME = &&TABLEVAR&N
EMBEDDED_TITLES = 'NO'
EMBEDDED_FOOTNOTES = 'NO'
PRINT_HEADER = 'CURRENT &&TABLEVAR&N AS OF &D';
PROC PRINT
DATA = WORK.&&TABLEVAR&N
NOOBS;
RUN;
%END;
基本上循环遍历表名数组,并为每个表输出单独的Excel表。通过调用宏变量& TABLEVAR,它应该动态地更改每个表的工作表名称。但是,我收到以下错误:
错误22-322:期待引用的字符串。
所以SAS确实解析了宏变量,我可以看到表名在日志中是正确的,但问题是它们不是带引号的字符串。所以我尝试了这样的引用:
选项(SHEET_NAME ='&& TABLEVAR& N'
但是后来SAS没有解析宏变量,所有的工作表都被命名为&& TABLEVAR& 1,2等等。
有解决方法吗? (每张表都是一个不同名称的单独表格,因此我无法使用BY组。)如果它们不能与ODS交互,那么有哪些好的宏?
答案 0 :(得分:1)
我刚刚发现将%sysfunc 和引用放在&& TABLEVAR& N 前面。
所以最终的代码如下:
%DO N = 1 %TO &SQLOBS;
ODS TAGSETS.ExcelXP
OPTIONS(SHEET_NAME = %sysfunc(quote(&&TABLEVAR&N))
EMBEDDED_TITLES = 'NO'
EMBEDDED_FOOTNOTES = 'NO'
PRINT_HEADER = 'CURRENT &&TABLEVAR&N AS OF &D';
PROC PRINT
DATA = WORK.&&TABLEVAR&N
NOOBS;
RUN;
%END;
答案 1 :(得分:0)
我认为你不需要这一切。如果在宏变量表达式周围使用双引号,则应该得到与%SYSFUNC(QUOTE())
函数相同的结果:
"&&TABLEVAR&N"
也就是说,除非你以某种方式计划在中使用双引号表格....