最近遇到一個問題,我覺得大家以后說不定都會遇到,所以在這分享給大家。
我們知道SAS變量名只能以下劃線或者字母開頭,然后由字母、數(shù)字、下劃線組成。
但是最近在用proc glm,把統(tǒng)計量輸出到數(shù)據(jù)集的時候,對應(yīng)的變量名卻是以數(shù)字開頭,這是在運用統(tǒng)計模型的時候,SAS它就直接輸出這樣的變量名,也沒有報錯,重新打開SAS,再跑程序也沒有問題,但是在batch ruu的時候,卻提示不能采用這樣的變量名。
下面見具體例子,以《sdtm-adam-pilot-project-master》里的ADVS數(shù)據(jù)集為例,計算兩兩比較的t值:
對應(yīng)的程序是這樣的:

對應(yīng)輸出統(tǒng)計量的數(shù)據(jù)集是這樣的:

根據(jù)前面的說明,變量名是不能以數(shù)字開頭的,但是log窗口里面也沒有任何報錯信息(先忽略那個自動畫圖的warning)

上面是在SASEG跑出來的結(jié)果,現(xiàn)在我們在SASbase里面試一下:

SAS base也沒有報錯,但是關(guān)鍵的問題來了,你肯定要對DIFF_pchg這個數(shù)據(jù)集里面的變量進行處理,好出report,但是在SASEG,你像下面這樣處理數(shù)據(jù)集不會報錯:


但是在SASbase卻會報錯

雖然說在SASEG里面你確實可以寫成‘3’n這樣的形式,但是首先這樣就違背了SAS變量名的基本原則。如果是給DM出個報告,只要能輸出正確的值就可以了,但是如果是遞交給CDE,建議還是不要這樣。
那么如何解決這個問題呢?
很簡單,一個options就可以了。
options validvarname=v7;
這個系統(tǒng)選項的作用就是在SAS運行的時候,輸出符合SAS規(guī)范的變量名

加上這個選項之后,輸出上面的pdiff_pchg數(shù)據(jù)集,那個3就會自動變成_3,這樣我們就可以在接下來的數(shù)據(jù)集對變量進行處理了。
大家還可以注意另兩個選項,其中一個“any”,我看SAShelp的解釋,就是如果你是options validvarname=any;那么我們剛才的'3'n就可以正常rename了,但是不建議大家這樣,可能出現(xiàn)一些意想不到的結(jié)果。
好了,最后我們來處理那個warning,
其實這個warning應(yīng)該是result窗口展示圖形的時候有問題,我們?yōu)榱耸∈?,可以直接在程序前面加上ods all close;這樣就不會在result 窗口輸出統(tǒng)計結(jié)果。
如果后續(xù)我們需要查看其他統(tǒng)計結(jié)果,可以采用
ods result on;
ods result off;