SAS-使用macros将结果输出为excel

我用下面的代码将结果导出为ex​​cel文件。 但是,每次都会以文件types输出结果。 我不得不手动改变他们的types为Excel。 &from.&&memname&i&from.&&memname&i我尝试将.xls放入,但SAS无法识别此格式。 我认为可能的原因是.x ,但我不怎么解决这个问题。

 %macro tradetime(sourcelib=,from=,going=,dir=); proc sql noprint; /*read datasets in a library*/ create table mytables as select * from dictionary.tables where libname = &sourcelib order by memname ; select count(memname) into:obs from mytables; %let obs=&obs.; select memname into : memname1-:memname&obs. from mytables; quit; %do i=1 %to &obs.; ods tagsets.excelxp file= "&Dir\&&memname&i" /*output the results to target file*/ style=XLsansPrinter; ods listing close; ods results off; proc univariate data= &from.&&memname&i; var time_l_ ; run; quit; ods tagsets.excelxp close; ods listing ; ods results on; %end; %mend; %tradetime(sourcelib='AXP',from=AXP.,going=AXP.,dir=D:\Data\description); 

您可能会遇到来自macrosvariables终结符的问题。 如果你试试:

 &Dir\&&memname&i.xls 

这是行不通的。 这个点是macrosvariables的终结符,事实上在你的情况下,你需要多于一个,因为你使用了两个& – 所以&[i]. 是一个macrosvariables,接下来你有&[memname&i.]. 作为第二个(第一个&消失)。 所以你需要:

 &Dir\&&memname&i...xls 

创build.xls扩展名。

请注意, tagsets.excelxp不会创build本机excel文件。 它创build了Excel可读的xml文件; 所以如果你把.xls放在它们上,excel会给你带来一些麻烦(在某些情况下,它会打开,在一些情况下会拒绝,取决于你的设置和excel的版本)。 如果您支持.xlsx文件并使用SAS 9.4 TS1M1或更高版本,则最好使用ods excel