Macros 环路SAS中的ODS输出

Macros 环路SAS中的ODS输出,macros,sas,Macros,Sas,我正在尝试将库中所有输出的比较结果输出到excel或pdf。这是我写的 %DO I = 1 %TO &coun; %LET DT = %SCAN (&DS_LIST., &I., ~); ods excel file="D:\test.xlsx"; PROC COMPARE BASE = BASE.&DT. COMPARE = COMPARE.&DT. OUTNOEQUAL OUTBASE OUTCOMP OUT = COMPAREOUT;

我正在尝试将库中所有输出的比较结果输出到excel或pdf。这是我写的

%DO  I = 1 %TO &coun; 
%LET DT = %SCAN (&DS_LIST., &I., ~); 

ods excel file="D:\test.xlsx";

PROC COMPARE BASE = BASE.&DT. COMPARE = COMPARE.&DT. OUTNOEQUAL OUTBASE
 OUTCOMP OUT = COMPAREOUT; 
RUN
;  
ods excel close; 

但是,它只提供最后一个数据集输出。。这里怎么了

您尚未显示
%DO
循环的
%END
。我假设您正在循环中打开和关闭ODS EXCEL目标。ODS EXCEL不会附加到现有文件,因此您只能从列表中的最后一个数据集获取比较输出。试试这个

* open ODS destination;
ods excel file="D:\test.xlsx";

* loop over data sets in DS_LIST, get compare report for each;
%DO  I = 1 %TO &coun;
  %LET DT = %SCAN (&DS_LIST., &I., ~); 

  PROC COMPARE BASE = BASE.&DT. COMPARE = COMPARE.&DT. OUTNOEQUAL OUTBASE
   OUTCOMP OUT = COMPAREOUT; 
  RUN;  
%END;

* close the ODS destination that contains the output from &coun comparisons;
ods excel close; 

您是否尝试过将excel文件作为库加载?这样您就可以直接使用proc compare

LIBNAME xdbsss EXCEL PATH="<path and file>.XLSX" SCAN_TEXT=NO;
LIBNAME xdbsss EXCEL PATH=“.XLSX”扫描\文本=否;

Excel被用作此处的输出目标,而不是读入或任何内容。使用libname从PROC COMPARE将结果导入其中是没有意义的,因为表与输出没有很好地对齐。如果您不知道,使用libname作为libname还允许您在其中输出!ODS输出不会像ODS语句那样自动发送到libname。这种解决方案不能解决老年退休金问题。