我用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
(也许是结果输出窗口?),请告诉我。)如果有,请如何操作。
答案 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)