Tag: proc

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有什么好处呢?

将一个excel文件导入SAS:长度超过32个字符的命名范围

我有一个(2010)excel文件,我想要导入到SAS的工作表的长名称。 作为一个虚拟的例子,假设这个表被称为somesheetnamethatislongenough (这是30个字符长 – 所以可以作为2010年Excel表的名称)。 现在假设我想在表单中导入C6:G200的范围。 现在我应该可以通过在proc import中使用range =选项来做到这一点,如下所示 proc import out=chk_xl_import datafile="somefilename.xlsx" replace ; range="somesheetnamethatislongenough$C6:G200"; getnames=no; run; 但是,我得到一个错误说: ERROR 65-58: Name 'somesheetnamethatislongenough$C6:G200' is too long for a SAS name in this context. (使用sheet =;选项结合range =;选项给出相同的错误)。 我想我可以通过在libname语句中使用Excel引擎来解决这个问题,但是我得到了同样的问题。 所以这段代码也不起作用: libname myxl_lib excel "somefilename.xlsx" header=NO ; data chk_xl_lib; set myxl_lib."somesheetnamethatislongenough$C6:G200"n; run; libname myxl_lib clear; 我基本上得到同样的错误: ERROR 307-185: […]