我尝试根据字段值(parent_account)将一个SAS表导出到多个Excel工作表中。我希望每个工作表的名称与parent_account相同。我使用了http://www.tek-tips.com/viewthread.cfm?qid=1335588中的以下代码,但我收到了以下错误消息:
在%EVAL函数或%IF条件中找到了一个字符操作数,其中需要一个数字操作数。 参数2到宏功能%SCAN不是数字。
%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 :(得分: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.
答案 1 :(得分: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;