【问题标题】:How can I avoid getting the "log window full" message in the below code in SAS?如何避免在 SAS 的以下代码中收到“日志窗口已满”消息?
【发布时间】:2016-05-31 04:43:38
【问题描述】:

如何更新以下代码,以免收到“日志窗口已满”消息?日志窗口中生成的大多数行是由于 proc corr。我尝试在代码开头添加 proc printto 行,但由于某种原因,日志窗口仍然被填满。谢谢。

PROC PRINTTO PRINT='C:\Users\test\auto.lst' NEW;
RUN;

%MACRO RunProgram(month, year, n);
data sourceh.group2;
set sourceh.group_&month.&year.;
int1=int;
int2 = ceil(int/2);
int3 = ceil(int/3);
int4 = ceil(int/4);
int5 = ceil(int/5);
int6 = ceil(int/15);
int7 = ceil(int/30);

proc sort data=sourceh.group2;
by symbol day month year int&n.;
run;

proc corr data=sourceh.group2; by symbol day; 
var zone ztwo;
ods output pearsoncorr=sourceh.zcorr;
run;

%MEND ;

%macro l;

%do n=1 %to 7;

%RunProgram(Dec, 2014, &n);
%RunProgram(Nov, 2014, &n);
%end;

%mend;

%l;

【问题讨论】:

  • 尝试ODS LISTING CLOSE;,然后在您想重新打开列表目的地时尝试ODS LISTING;
  • 您移动了列表目的地而不是日志。
  • 为什么PROC CORR 会填满您的日志?也许有一个问题需要解决?
  • 非常感谢,我意识到我没有删除 ods 跟踪,这也在填充日志文件。

标签: loops macros sas


【解决方案1】:

使用 proc 重定向您的日志 打印到。

Proc printto log='templog.log' new;
Run;

如果之后使用,您可以重置

 Proc printto log=log; run;

或者,您可以将选项 nonotes 设置为 on,以便日志不会得到输出,除非出现错误。这会使调试变得困难。

 Option nonotes;

重新打开笔记选项:

 Option notes;

【讨论】:

  • 谢谢。我应该把这些行放在程序的什么地方?他们应该进入宏内部吗?
  • 您使用的是哪个选项?如果 proc 打印将它放在宏之前。如果注释选项它们放置在宏内部,则顶部的非注释和底部的重置为注释。这些是建议,但它们可以放置在几个不同的位置。
【解决方案2】:

一般来说,我认为你应该输出你的日志,这样你就可以检查是否出了问题; Reeza 的回答解决了这种方法。但是,您也可以使用命令清除日志

dm 'clear log';

如果您将此作为 RunProgram 宏的第一行或最后一行插入,您的日志将在宏的每次迭代时清除。只要宏的一次迭代没有填满您的日志,这将解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 2011-03-26
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多