[英]Export one SAS table into multiple Excel worksheets based on field value
我试图根据一个字段(parent_account)的值将一个SAS表导出到多个Excel工作表中。 我希望每个工作表的名称都与parent_account相同。 我正在使用在http://www.tek-tips.com/viewthread.cfm?qid=1335588上找到的以下代码,但我收到了以下错误消息:
在%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;
您可以尝试使用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.
这可能会有所帮助
%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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.