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"
也就是说,除非你打算在表格中加双引号。
- C#从XLS检索数据
- 查找两个date之间的date/时间差异,不包括周末/下class时间和退货x Days y Hrs zz Mins
- macrosselect整个工作表中的第一个非空单元格
- 如何在Excel VBA中添加CC与Lotus Notes电子邮件
- 我怎样才能加载一个Excel的.xlsx文件的memStream,然后从memStream打开它?
- Applescript + InDesignselect表格中的正文行
- Excel公式来确定一个范围内的任何单元格是否包含值
- PHP file_get_contents / file_put_contents更改CSV的date格式
- python程序在Django