Logging 查看SAS代码的输出日志

Logging 查看SAS代码的输出日志,logging,sas,output,Logging,Sas,Output,我的团队中的一名成员正在使用SAS,当输入文件由于任何原因不正确时,他们的代码会返回“Errors”、“Invalid”、“Merge statements”、“Uninitialized”和“Warning”语句 在运行代码之后,我经常使用CTRL+F检查输出日志中的这些关键字,并相应地修改输入文件 可以想象,使用CTRL+F相当费劲 如果在输出的前面有任何上述语句,我希望代码在输出的末尾自动打印 我该怎么做?在哪里可以找到有关如何编程的信息 我正在使用SAS 9.1请考虑使用PROC PRI

我的团队中的一名成员正在使用SAS,当输入文件由于任何原因不正确时,他们的代码会返回“Errors”、“Invalid”、“Merge statements”、“Uninitialized”和“Warning”语句

在运行代码之后,我经常使用CTRL+F检查输出日志中的这些关键字,并相应地修改输入文件

可以想象,使用CTRL+F相当费劲

如果在输出的前面有任何上述语句,我希望代码在输出的末尾自动打印

我该怎么做?在哪里可以找到有关如何编程的信息


我正在使用SAS 9.1

请考虑使用
PROC PRINTTO
将日志重定向到一个文件。从此处运行此代码以查找您提到的字符串的任何匹配项:

filename logfl "<insert log filename here>" lrecl=32767;
/* Lrecl set high to ensure long lines are captured */

data _NULL_;
  infile logfl;
  input;
  if index (_infile_,'ERROR:') then put _infile_;
  else if index(_infile_,'WARNING') then put _infile_;
  else if index(_infile_,'uninitialized') then put _infile_;
  else if index(_infile_,'Merge statements') then put _infile_;
run;
它将匹配
Uniniti
Uniniti

代码将按照日志中的顺序简单地打印出感兴趣的行。您可以通过以下方式进一步改进代码:

  • 将字符串放入一个单独的数据集或平面文件中(以防您找到更多想要查找的内容,并希望使代码更易于维护)
  • 打印找到字符串的行号(输出
    \u N\u
    以及
    \u infle\u
    -首先测试,我不确定
    \u N\u
    是否会精确映射到行号)

如果您升级到SAS 9.4并在您的编程环境中使用Enterprise Guide(企业指南),它内置了一个自动日志解析器,可以标记错误/警告,在底部对它们进行分组,让您单击以查找发生错误或警告的代码或日志,并提供计数

其次,如果您成批运行代码(右键单击.sas文件->成批提交,或运行.bat文件或类似文件),那么日志最后将包含指向错误的指针,类似于“错误打印在第45,46,48,55,56页”。不是警告或注释,只是错误


最后,许多人编写并发布了在线日志解析器/分析器/阅读器。其中一些任务与您上面的要求类似。有一个很好的列表,或者使用您选择的搜索引擎。

这看起来很棒。多谢各位。我们将实现它,当我们运行它时,我将接受。没问题,我必须承认我已经有6个月没有在SAS中编程了,所以如果有任何问题,请询问,我希望能够提供帮助。您可以使用
查找
而不是
索引
,它有修饰符
i
,不区分大小写。我强烈建议升级到新版本,或要求您的站点升级。9.1大约有十年的历史,与9.2相比,它缺少一些重要的特征,更不用说9.3或9.4了。
if index(upcase(_infile_),'UNINITI') then put _infile_;