我使用以下代码将结果导出为excel文件。但是,每次都会以文件类型输出结果。我必须手动将其类型更改为excel。我尝试在.xls
之后添加&from.&&memname&i
,但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);
答案 0 :(得分:2)
宏变量终结符可能存在问题。如果您尝试:
&Dir\&&memname&i.xls
那不行。点是宏变量终止符,事实上在你的情况下你需要不止一个,因为你使用了两个&
- 所以&[i].
是一个宏变量,接下来你有{{} 1}}作为第二个(第一个&[memname&i.].
消失)。所以你需要:
&
创建.xls扩展名。
请注意,&Dir\&&memname&i...xls
不创建本机Excel文件。它创建了excel可读的xml文件;如果你把tagsets.excelxp
放在它们上,那么excel会给你一点麻烦(在某些情况下它会打开,在某些情况下它会拒绝,取决于你的设置和excel的版本)。如果您支持.xls
文件且使用SAS 9.4 TS1M1或更高版本,则最好使用ods excel
。