动态更改SAS ODS中的工作表名称

时间:2016-12-07 08:57:32

标签: excel macros sas proc sas-macro

有没有办法使用宏动态更改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交互,那么有哪些好的宏?

2 个答案:

答案 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"

也就是说,除非你以某种方式计划在中使用双引号表格....