dynamic更改SAS ODS中的工作表名称

有没有办法使用macrosdynamic更改SAS ODS中的图表名称? 在macros里面,我有下面的代码:

%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工作表。 通过调用一个macrosvariables&TABLEVAR,它应该dynamic地改变每个表的表名。 但是,我得到以下错误:

错误22-322:期待一个引用的string。

所以SAS确实parsing了macrosvariables,我可以看到表名在日志中是正确的,但是问题是它们不是引用的string。 所以我尝试了这样的引号:

选项(SHEET_NAME ='&& TABLEVAR&N'

但是,macrosvariables没有被SAS解决,所有的表都被命名为&& TABLEVAR&1,2等。

有没有解决的办法? (而且每张表是不同名称的单独表,所以我不能使用BY组。)如果不能与ODS交互,那么macros有什么好处呢?

我刚刚发现把%sysfunc放在&& TABLEWAR&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; 

我不认为你需要这一切。 如果在macrosvariablesexpression式中使用双引号,则应得到与%SYSFUNC(QUOTE())函数相同的结果:

 "&&TABLEVAR&N" 

也就是说,除非你打算表格中加双引号