SAS将多个表格写入一个XLSX工作簿,每张工作表有2个表格

SAS将多个表格写入一个XLSX工作簿,每张工作表有2个表格,sas,sas-macro,Sas,Sas Macro,我是SAS的新手,在导出数据时遇到一些问题。我编写了一个宏来根据某个ID生成一些摘要表。该宏为特定proc sql查询中标识的每个ID创建两个表。我可以写出最后两个表,但它会覆盖所有表。我想知道是否有办法为查询中标识的每个ID生成一张包含两个汇总表的表。以下是我迄今为止导出数据的代码: %macro output(x); ods tagsets.excelxp file="W:\user\test.xls" options(sheet_interval='none'); proc print

我是SAS的新手,在导出数据时遇到一些问题。我编写了一个宏来根据某个ID生成一些摘要表。该宏为特定proc sql查询中标识的每个ID创建两个表。我可以写出最后两个表,但它会覆盖所有表。我想知道是否有办法为查询中标识的每个ID生成一张包含两个汇总表的表。以下是我迄今为止导出数据的代码:

%macro output(x);
ods tagsets.excelxp file="W:\user\test.xls" options(sheet_interval='none');

proc print data=prov_&x;
run;

proc print data=prov_revcd_&x;
run;

ods tagsets.excelxp close;
%mend;


/*Run a loop for each IDcode. Each code will enter the document generation loop*/
%macro loopit(mylist);
    %let else=;
   %let n = %sysfunc(countw(&mylist)); /*let n=number of codes in the list*/
    data 
   %do I=1 %to &n;
      %let val = %scan(&mylist,&I); /*Let val= the ith code in the list*/
    %end;

   %do j=1 %to &n;
      %let val = %scan(&mylist,&j); /*Let val= the jth code in the list*/
/*Run the macro loop to generate the required tables*/
%runtab(&val);
%output&val);
   %end;
   run;
%mend;

/*Run the macro loop over the list of significant procedure code values*/
%loopit(&varlist);

如果您能帮助我们解决此问题,我们将不胜感激!谢谢

ods tagsets.excelxp文件=
ods tagsets.excelxp close
移动到宏外部,否则每次都会重新创建该文件


您可能还需要显式命名图纸

我会像这样重写
%output

%macro output(x);
ods tagsets.excelxp options(sheet_interval='none' sheet_name="&x");

proc print data=prov_&x;
run;

proc print data=prov_revcd_&x;
run;    
%mend;
然后按照Reeza的建议,将原始的
ods tagsets.excelxp文件=…
close
放在整个宏之外

ods tagsets.excelxp file="c:\temp\test.xlsx";
%loopit(&varlist)
ods tagsets.excelxp close;
如果您使用
PROC EXPORT
,则不需要此步骤(也不需要ODS),就可以直接发送到工作簿


但是,这只允许每个工作表有一个数据集-因此,您可以首先将它们作为单个数据集附加在一起,或者在此解决方案中使用两个工作表。

您有什么版本的SAS?以及您使用ODS而不是PROC EXPORT的任何特殊原因?我使用的是SAS 9.3。使用ODS没有什么特别的原因,如果可以使用PROC EXPORT来完成的话,那就好了。这与这个问题没有任何关系——只是想知道是否有原因。(PROC EXPORT生成xlsx文件,而您在上面看到的实际上并没有)。顺便说一句,有关这方面的更多信息,请参阅。谢谢,第一个解决方案似乎最适合我正在尝试的工作!Hey@Joe您的解决方案似乎在大部分情况下都有效,只是它切断了工作簿第一页上的第二个表格。我尝试了使用多个数据集,并尝试了一些语法上的更改,但没有任何效果。你对此有什么建议吗?我不太明白你的意思。因此,它会为每张工作表生成两个汇总表,出于某种原因,工作簿中的第一张工作表只包含一个表。这没什么大不了的,因为我可以手动创建表并将其添加到报表中。再次感谢你的帮助。
%macro output(x);
proc export data=prov_&x outfile="c:\temp\test.xlsx" dbms=excel replace;
  sheet="&x._prov";
run;
%mend;