如何在SAS结果输出窗口中显示句子

时间:2016-03-22 14:37:31

标签: sas

我用sas编写了一个宏。我使用以下代码将日志保存在外部txt文件中。

proc printto log="path\log.txt"; run;

%macro loop(num);

  for i = 1 : #
    data a;
    set a;
    display &i;
    run;       
%mend;

% loop(100)

proc printto;  run;

我的程序像循环一样工作。对于i = 1 : 100,请执行i = i +1之后的操作。我想在每个循环结束时显示i,所以我知道程序在哪里。我不希望它显示在log /(log txt文件)中,因为它将与日志混合并且难以阅读。所以我不能使用put "&i"功能。

如果有更好的地方可以显示i(也许是结果输出窗口?),请告诉我。)如果有,请如何操作。

2 个答案:

答案 0 :(得分:1)

日志是放置它的正确位置。存在许多技巧可以帮助您将其显示出来。

  • 日志以不同颜色突出显示内容的方式由关键字NOTE:WARNING:ERROR:驱动。如果你不记得有些误导性的日志记录,你可以利用这些优势。
  • 在大部分处理过程中,关闭多余的日志消息,或将其重定向到其他位置。这在宏内部很常见。
  • 使用以下内容:

代码:

%put ********************************************************;
%put * ITERATION &i BEGINNING                               *;
%put ********************************************************;

所有这一切,当然可以做你所要求的事情;问题是,你在哪里看到它是有用的。

两个建议。

首先:ods text将输出到结果窗口,但它要求您打印其他内容(它不会单独显示)。它与使用title完全不同。

%macro test;
  %do i=1 %to 10;
    ods text="Running &i. Iteration";
    proc print data=sashelp.class;
    run;
  %end;
%mend test;
%test;

同样,您可以使用ods proclabel获取Results Explorer窗口以显示迭代编号。

%macro test;
  %do i=1 %to 10;
    ods proclabel="&i. Iteration";
    proc print data=sashelp.class;
    run;
  %end;
%mend test;
%test;

我更喜欢后者;它可以更容易地看到正在发生的事情。

然而,两者都有一个主要的限制:它们通常不会让你看到宏在执行时发生了什么。您需要一些目的,我怀疑这将更新SAS环境之外的文件;除日志之外的任何东西通常都会被冻结。而IDE则考虑做SAS事情。

如果您打算将此作为一种“我们能走多远”的目标。监视器,你有几个选择。

首先,SAS / AF窗口可能会起作用 - 请参阅Aster, NESUG '92作为示例。

其次,写入文件。

filename monitor "c:\temp\monitor.dat";
%macro test;
  %do i=1 %to 100;
    data _null_;
      file monitor mod;
      put "Iteration &i started";
    run;
    *... do stuff ...;
  %end;
%mend test;
%test;

这基本上只是制作你自己的辅助日志,这似乎是最好的妥协。如果你有SYMBOLGEN,它也会在日志中提供相同的信息。

答案 1 :(得分:1)

由于您使用的是PC SAS,因此在交互式会话中,您可以使用数据步骤PUT语句写入日志或输出窗口。在PC中,日志和输出窗口实时更新(与EG不同)。

%macro testmsg
  (nloop=5
  ,file=log /* log | print */
   )
;
  %local i ;
  %do i=1 %to &nloop ;
    data _null_ ;
      file &file ;
      x=sleep(3) ;
      put "&i" ;
    run ;
  %end ;
%mend testmsg ;

%testmsg(file=log)
%testmsg(file=print)