2017-03-02 76 views
0

我想根據字段值(parent_account)將一個SAS表導出到多個Excel工作表中。我希望每個工作表的名稱與parent_account相同。我使用的代碼是http://www.tek-tips.com/viewthread.cfm?qid=1335588,但我收到以下錯誤消息:基於字段值將一個SAS表導出到多個Excel工作表中

在需要數字操作數的%EVAL或%IF條件中找到字符操作數。 宏函數%SCAN的參數2不是數字。

%macro export_to_excel(); 
%local varlist idx var; 

proc sql noprint; 
    select distinct parent_account into: varlist separated by '||' 
    from todays_activity; 
quit; 

%let idx = 1; 
%do %while (%scan(&varlist, &idx, %str(||)) ne %str()); 
    %let var=%scan(&varlist, &idx, %str(||)); 
    proc export data=sashelp.class (where=(parent_account="&var")) 
     outfile='My file location\Report.xls' 
    dbms=excel; 
    sheet="&var"; 
quit; 
%let idx = %eval(&idx + 1); 
%end; 
%mend export_to_excel; 

%export_to_excel; 
+0

您正在使用什麼版本的SAS。如果您使用的是當前版本,則可以嘗試使用ODS EXCEL並調整何時爲每個BY組創建新工作表。然後用BY語句使用PROC PRINT。 – Tom

+0

對不起,我應該提到這一點。我正在使用SAS Enterprise Guide 7.11。 –

+0

EG會話連接到哪個版本的SAS對於EG版本更重要。 – Tom

回答

0

您可以嘗試使用ODS EXCEL。這裏是一個使用SASHELP.CLASS數據集的例子。 首先確保數據按您的分組變量排序。

proc sort data=sashelp.class out=class ; 
    by sex ; 
run; 

設置ODS指向您的目標文件。告訴它爲每個BY組創建一個新工作表。

ods excel file="&path/class.xlsx" ; 
ods excel options 
(sheet_interval="bygroup" 
suppress_bylines="yes" 
sheet_name='GENDER' 
); 

您也可能想要關閉其他輸出目標。 然後使用PAGEBY選項打印文件。並關閉ODS EXCEL目標

proc print data=class noobs; 
    by sex ; 
    pageby sex ; 
    var _all_; 
run; 
ods excel close; 

要測試它,你可以嘗試讀回它作爲數據。但要注意它會創建帶有嵌入空格的成員名稱。

options validmemname=extend; 
libname xx xlsx "&path/class.xlsx"; 
proc copy inlib=xx outlib=work; run; 
libname xx clear ; 

從SAS日誌

NOTE: The data set WORK.GENDER has 9 observations and 5 variables. 
NOTE: The data set WORK.'GENDER 2'n has 10 observations and 5 variables. 
+0

感謝您花時間幫忙。運行此代碼的第二部分後,我收到警告:針對EXCEL目標的不支持的設備'ACTIVEX'。使用設備'ACTXIMG'。 –

+0

如果仍然使XLSX文件?我認爲這隻適用於你想製作圖表的情況。也許你的TITLE或FOOTNOTE語句觸發了這個消息? – Tom

+0

它製作了一個XLSX文件,但它已損壞,無法打開。 –

0

這可能是有益的

%macro export_to_excel; 
    proc sql noprint; 
    select distinct parent_account into: varlist separated by '@' from todays_activity; 
    select count(distinct parent_account) into:n from todays_activity; 
    quit; 
    %do i=1 %to &n; 
    %let var= %scan(&varlist,&i,"@"); 
    proc export data=sashelp.class (where=(parent_account="&var")) 
      outfile='Your file location\Report.xls' 
     dbms=excel; 
     sheet="&var"; 
    run; 
    %end; 
    %mend export_to_excel; 
+0

奇怪的是,它運行速度很快,只有一個音符,沒有警告或錯誤:注意:寫入TAGSETS.SASREPORT13(EGSR)正文文件:EGSR。沒有文件被創建。我是否缺少一行代碼? –

相關問題