关于数据步骤执行的SAS错误,我遇到了一个非常令人讨厌的问题 该错误不可重现,但在不同的代码段每周发生几次 该错误不会在日志中产生任何警告或错误输入 只有以下注释打印在日志中:
NOTE: The DATA step has been abnormally terminated
此错误的结果是数据集不完整 发生错误的会话的返回码是0。
如果我再次执行相同的程序,则不会再出现错误。
所以我需要采取特殊的措施来检测这种特殊错误的发生 我计划通过扫描给定音符的日志来完成此操作。
现在我对这个错误有两个问题:
1.为什么会出现这种错误并且可以避免?
2.扫描日志是否有更优雅的解决方案来解决这个问题?
每个提示都受到赞赏。
THX
编辑:数据集不大(大约100.000个,包含15个变量)
Edit2:datastep没有在宏内运行 SAS版本是9.2 操作系统是SunOS 5.10 我在工作中创建数据集 代码由SAS DI Studio 4.21生成。
答案 0 :(得分:1)
如果您以批处理模式运行,SAS通常会自动进入语法检查模式(即,如果遇到严重错误,则停止运行代码并仅解析代码逻辑,以便告诉您明显的错误)。您可以通过设置OPTION DMSSYNCHK;
在DM中有目的地执行此操作。但是,在您的情况下,这可能没有帮助 - 但如果您在DM模式下运行,则可能值得一试。
您还可以查看&SYSERR.
和&SYSTERRORTEXT.
宏变量。这些存储值基于最后一个数据步骤或proc步骤运行; &SYSERR=0
表示它成功结束,而其他值表示不成功(除了&SYSERR=4
,这意味着它已运行但有警告。)&SYSERRORTEXT.
包含ERROR:
之后的文本来自最近错误的日志。
我认为您需要首先检查&SYSERR
,因为您可能会遇到来自最近数据步骤之前的错误(我认为这不会被成功运行清除)。这些可能包含也可能不包含基于您的问题的信息,但是值得检查(并且可能在它通常出错的位置处%PUT _AUTOMATIC_;
权限,以查看是否存在包含有用信息的变量(如果不是这些)。< / p>
有关详细信息,请参阅the documentation。
此外,您可以尝试添加在数据步骤结束时发生的一些代码。如果没有看到你的数据步骤,很难说如何识别,但是像
那样%let step8complete=0;
data want;
set sashelp.class end=eof;
if eof then do;
call symputx('step8complete','1');
end;
run;
允许您查询宏变量&amp; step8complete以查看它包含的内容。
最后,您可能想要弄清楚是否可以确定您创建的数据集中应该有多少条记录,并测试它们是否具有正确的行数。如果他们不这样做,那么你就有潜在的问题。 PROC CONTENTS可以告诉您数据集包含多少行。