【问题标题】:ODS output in loop SAS循环 SAS 中的 ODS 输出
【发布时间】:2018-05-30 14:56:15
【问题描述】:

我正在尝试将库中所有输出的比较结果输出到 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; 

但是它只给了我最后一个数据集输出..这里有什么问题?

【问题讨论】:

    标签: macros sas


    【解决方案1】:

    您没有为%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; 
    

    【讨论】:

      【解决方案2】:

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

      LIBNAME xdbsss EXCEL PATH="<path and file>.XLSX" SCAN_TEXT=NO;
      

      【讨论】:

      • Excel 在这里被用作输出目的地,没有被读入或任何东西。使用 libname 将 PROC COMPARE 中的结果通过管道传输到那里没有意义,因为这些表与输出没有很好地对齐。
      • 如果你不知道,使用它作为库名也可以让你在里面输出!
      • ODS 输出不会像使用 ODS 语句那样自动发送到 libname。此解决方案不会解决 OPs 问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多