系統字母數字傳回碼
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時發出的警告。
%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。