天天看點

帶你讀《SAS資料分析開發之道 軟體品質的次元》第三章通信交流3.3系統字母數字傳回碼(一)

系統字母數字傳回碼

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&notarealmacro;

WARNING:ApparentsymbolicreferenceNOTAREALMACROnotresolved.&notarealmacro

%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。

繼續閱讀