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

如何在SAS结果输出窗口中显示句子,sas,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

我用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
,这样我就知道程序在哪里了。我不希望它显示在日志/(日志txt文件)中,因为它将与日志混合,难以读取。所以我不能使用
put“&I”
函数


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

日志是正确的位置。有很多技巧可以帮助您使其可见

  • 日志以不同颜色突出显示内容的方式是由关键字
    注意:
    警告:
    错误:
    驱动的。如果你不介意稍微有点误导性的日志注释,你可以利用它们来为自己谋利
  • 在大容量处理过程中,关闭多余的日志消息,或将其重定向到其他位置。这在宏中很常见
  • 使用以下内容:
代码:

尽管如此,你还是可以按你的要求去做;问题是,在哪里看到它对你有用

两个建议

首先:
ods文本
将输出到结果窗口,但它要求您打印其他内容(它不会自己显示)。这和使用
标题
没有什么不同,真的

%macro test;
  %do i=1 %to 10;
    ods text="Running &i. Iteration";
    proc print data=sashelp.class;
    run;
  %end;
%mend test;
%test;
类似地,您可以使用
ods proclabel
获取结果浏览器窗口以显示迭代编号

%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窗口可能会执行此操作—请参见示例

第二,写入文件

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,它也会在日志中为您提供相同的信息。

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


您运行SAS的环境是什么?PC SAS或企业指南或SAS studio或…?PC SAS版本为SAS 9.4Hi Joe,感谢您的详细解释。我正在尝试实施你建议的最后一个解决方案。你能教我如何打开和检查monitor.dat文件吗?它只是一个文本文件。使用文本编辑器打开。
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;
%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)