如何在SAS结果输出窗口中显示句子
我用sas写了一个宏。我使用以下代码将日志保存在一个外部txt文件中如何在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
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)