系统字母数字返回码
SAS 字母数字返回码在这里不是必需的,因为它们仅反映&SYSERR 的数字值。
此处虽然进行了介绍,但不建议使用这类返回码。
&SYSWARNINGTEXT
自动宏变量 &SYSWARNINGTEXT包括当前 SAS会话生成的或出现在 SAS日志中的最近一个警告信息的文本。警告信息并不代表警告实际发生了。例如,用
%PUT 程序指令打印“WARNING: FAKE”将导致 &SYSWARNINGTEXT 改变为
FAKE,如以下输出信息所示。
%putBEFORE:&syswarningtextLENGTH:%length(&syswarningtext);BEFORE: LENGTH:0
%putWARNING:FAKE;WARNING:FAKE
%putAFTER:&syswarningtext LENGTH:%length(&syswarningtext);
AFTER:FAKE LENGTH:4
以下输出内容显示的是引用了未初始化的宏变量 &NOTAREALMACRO时发出的警告。
%putBEFORE:&syswarningtextLENGTH:%length(&syswarningtext);BEFORE: LENGTH:0
%put¬arealmacro;
WARNING:ApparentsymbolicreferenceNOTAREALMACROnotresolved.¬arealmacro
%putAFTER:&syswarningtext LENGTH:%length(&syswarningtext);AFTER:ApparentsymbolicreferenceNOTAREALMACROnotresolved.
LENGTH:55
由于 &SYSWARNINGTEXT是只读的,只能在新的警告发出之后重置,因此,它不能手动重置为丢失。尽管该代码仅仅是在 SAS日志中产生一个警告,但该代码的运行依然代表着一个故障,这是因为预期的变量没有显示出来。出于这个原因,在这种情况下,尽管丢失的宏变量在SAS日志中显示为“WARNING”,但它依然是一个错误,是“人为的错误”。
由于 &SYSWARNINGTEXT不能被重置,该宏变量在SAS会话结束之前将一直保留在后续程序中。例如,运行上述代码之后,在同一SAS会话中将会继续独立运行以下有效的 DATA步骤,这将会生成非常复杂的输出信息 :
%letsyscc=0;
datafinal;
lengthchar$10;run;
NOTE:ThedatasetWORK.FINALhas1observationsand1variables.NOTE:DATAstatementused(Totalprocesstime):
realtime 0.03seconds
cputime 0.03seconds
%putSYSCC:&syscc;SYSCC:0
%putSYSWARNINGTEXT:&syswarningtext;
SYSWARNINGTEXT:ApparentsymbolicreferenceNOTAREALMACROnotresolved.
尽管将该&SYSCC重置为“0”,且没有遇到任何警告或“运行时错误”,但该代码还是会错误地显示在上一个不相关程序中保存下来的&SYSWARNINGTEXT值。
为了克服这一缺点并确保&SYSWARNINGTEXT 仅在恰当的时候使用,代码应该仅在&SYSCC=4以及&SYSCC在程序启动之前重置时再引用&SYSWARNINGTEXT。然而,如以下“&SYSWARNINGTEXT”部分所介绍的一样,由于在某些情况下,&SYSCC>4(表示存在错误)将掩盖一个警告代码,因此,没有程序化的方法能证实&SYSWARNINGTEXT 是当前的、相关的。出于这一原因以及前述的一些缺点,我们并不推荐使用 &SYSWARNINGTEXT。