2016-10-28 109 views
1

我用下面的代碼將結果導出爲ex​​cel文件。但是,每次都會以文件類型輸出結果。我必須手動將其類型更改爲excel。我試過&from.&&memname&i後放.xls,但SAS無法識別這種格式。我認爲可能的原因是.x,但我不怎麼解決這個問題。SAS-使用宏輸出結果爲excel

%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); 

回答

2

您可能會遇到來自宏變量終止符的問題。如果你嘗試:

&Dir\&&memname&i.xls 

這將無法正常工作。點是宏變量終結符,事實上在你的情況下,你需要多於一個,因爲你使用了兩個& - 所以&[i].是一個宏變量,然後你有&[memname&i.].作爲第二個(第一個&消失)。所以您需要:

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

創建.xls擴展名。

請注意tagsets.excelxp確實不是創建本機excel文件。它創建Excel可讀的xml文件;所以如果你把.xls放在它們上面(有些情況下會打開,有些會拒絕,取決於你的設置和excel的版本),excel會給你帶來一些麻煩。如果您支持.xlsx文件並使用SAS 9.4 TS1M1或更高版本,則最好使用ods excel