【问题标题】:Exporting multiple sas datasets into multiple excel sheets with macro?使用宏将多个 sas 数据集导出到多个 excel 表中?
【发布时间】:2014-04-02 20:30:19
【问题描述】:
我正在寻找是否有一个宏可以将多个数据集导出到工作簿中单独的 Excel 工作表中。如果每个工作簿可以有 10 张工作表,那就太好了。
我可以按照以下常规方式进行操作,但我有 100 多个数据集要导出:
PROC EXPORT DATA=HAVE;
OUTFILE= "S:\MYEXCEL.xlsx"
DBMS=EXCEL REPLACE;
SHEET="NEW_SHEET";
RUN;
谢谢!
【问题讨论】:
标签:
excel
sas
export
proc
【解决方案1】:
一般的概念是你会做这样的事情:
%macro export_data(file=,data=,sheet=);
proc export data=&data.
outfile="&file."
dbms=excel replace;
sheet="&sheet.";
run;
%mend export_data;
然后,您需要根据需要构建导出宏调用。获取每个数据集一行的数据集(在 SQL 中使用 dictionary.tables 或在数据步骤中使用 sashelp.vtable),然后根据您的需要计算工作表名称的逻辑以及需要多少工作簿。 Google 数据驱动的宏需要更多信息。
【解决方案2】:
如果您拥有“SAS/PC 文件格式访问权限”许可,这个小宏可以轻松完成:
%macro SASToExcel(ImportLibrary=, ExportLocation=);
ods output members = _Members;
proc datasets lib = &ImportLibrary; run; quit;
proc sql;
select count(Name) into :NumOfDatasets from _Members;
select Name into :Dataset1-:Dataset%trim(%left(&NumOfDatasets)) from _Members;
quit;
%do index = 1 %to &NumOfDatasets;
proc export data=&ImportLibrary..&&Dataset&index.
outfile="&ExportLocation"
dbms=excel replace;
sheet="&&Dataset&index";
run;
%end;
proc datasets;
delete _Members;
quit;
%mend;
%SASToExcel(ImportLibrary=raw, ExportLocation = c:\test.xlsx);