SAS:如何隐藏日志文件中的内容

时间:2013-08-30 18:46:16

标签: logging import sas proc

我们使用SAS生成大量报告并将日志保存在文件中。到目前为止一切顺利,除了一件事,一切都很好。

我们有一个宏检查日志文件中的单词警告和错误,如果找到这些单词,则将文件放在错误文件夹中。我们遇到的问题是当我们导入带有proc import的CSV文件时,它会自动将它放在日志文件中:

proc import datafile=XXXXXXXXXX
out=XXXXXXXXXX
dbms=dlm
replace;
delimiter=',';
getnames=yes;
datarow=2;
GUESSINGROWS=1000;
run;

/**********************************************************************
*   PRODUCT:   SAS
*   VERSION:   9.1
*   CREATOR:   External File Interface
*   DATE:      30AUG13
*   DESC:      Generated SAS Datastep Code
*   TEMPLATE SOURCE:  (None Specified.)
***********************************************************************/
data XXXXXXXX;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile XXXXXXXX delimiter = ',' MISSOVER DSD  firstobs=2 ;
informat XXXXXXXX $5. ;
... code continue
format XXXXXXXX $5. ;
... code continue
input
XXXXXXXX $
... code continue
;
if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
run;

因此,我们留下了一堆标记有错误的文件但不应标记它们。我们可以做些什么来隐藏日志文件中的proc导入代码?

由于

3 个答案:

答案 0 :(得分:3)

当错误检查日志时,我只在行的开头考虑ERROR或WARNING,例如

if index(_infile_, 'ERROR') = 1 ....

我们还有一个允许的错误消息列表。

如果不是这样,看起来你可以隐藏IMPORT使用NOSOURCE选项生成的内容,但它不是很好。

options nosource;
proc import file='E:\test.csv' out=test replace;
run;
options source;

答案 1 :(得分:0)

我已经看到一些帖子建议使用“ options nosource”来抑制proc导入或proc导出的多余输出,但是实际上我没有看到它起作用。 SAS网站上发布了一个示例,显示它无法正常工作。页面为http://documentation.sas.com,但是如果该链接不起作用,请搜索“ sas proc export nosource 02sep16”。请注意,即使未在选项中指定任何来源,带编号的行仍包含不需要的打印输出。

答案 2 :(得分:0)

我也是这样。我grep错误,不希望它出现! 使用proc输入时我看到ERROR,所以对我来说,这就是解决问题的方法。

使用proc输入,然后复制日志文件并根据需要进行编辑。

  proc import datafile="file.out"
  out=shoes
  dbms=csv
  replace;
产生此结果的

28             data WORK.SHOES    ;
29             %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
30             infile 'file.out' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;
31                informat QUEUE_ID $8. ;
56                format VAR13 best12. ;
57             input
58                         QUEUE_ID  $
69                         AUTOMATION_STATUS  $
70                         VAR13
71             ;
72             if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
73             run;

我只使用该代码而不是proc输入并删除第29,72行...