sas宏程序編寫(xiě)教程 sas宏參數(shù)的兩種類型?
sas宏參數(shù)的兩種類型?SAS宏參數(shù)包含兩種類型的宏變量:自動(dòng)啟動(dòng)宏變量,由SAS系統(tǒng)提供給;用戶定義的宏變量,由用戶在程序中定義。自動(dòng)啟動(dòng)宏變量在SAS進(jìn)程結(jié)束時(shí),或程序運(yùn)行過(guò)程中由系統(tǒng)自動(dòng)創(chuàng)建角色
sas宏參數(shù)的兩種類型?
SAS宏參數(shù)包含兩種類型的宏變量:
自動(dòng)啟動(dòng)宏變量,由SAS系統(tǒng)提供給;
用戶定義的宏變量,由用戶在程序中定義。
自動(dòng)啟動(dòng)宏變量
在SAS進(jìn)程結(jié)束時(shí),或程序運(yùn)行過(guò)程中由系統(tǒng)自動(dòng)創(chuàng)建角色,在SAS再次前一直都一直保持比較有效,是全局宏變量,能在SAS任何地方被語(yǔ)句。
定義宏變量
有兩種定義宏變量:%LET和callsymput。定義宏變量并分配個(gè)值給宏變量的最簡(jiǎn)單方法是使用宏程序語(yǔ)句%LET。格式萬(wàn)分感謝:
%LET變量名變量值;
兩個(gè)語(yǔ)句是callsymput,其格式::
call!symput(變量名,變量值);
sas 小技巧?
1)讓SAS也能用中文變量名
設(shè)置成的SAS命名規(guī)則是沒(méi)能使用中文等特殊字符充當(dāng)SAS名,不過(guò)我們這個(gè)可以按照validvarnameany系統(tǒng)選項(xiàng),強(qiáng)行突破此限制,不僅如此,我們甚至還這個(gè)可以按照validmemnameextend系統(tǒng)選項(xiàng)進(jìn)階數(shù)據(jù)集名稱的限制。
optionsvalidmemnameextendvalidvarnameany
↑突破命名原則限制
技雖這般,但當(dāng)然不推薦推薦,在確實(shí)無(wú)可奈何的情況下,.例如別給了你一個(gè)幾百個(gè)中文變量名的CSV文件,是可以考慮到救救急。
(2)選擇性的遺忘再打開(kāi)SAS數(shù)據(jù)集電腦提示格式問(wèn)題
有時(shí)會(huì)出現(xiàn)別人給的SAS數(shù)據(jù)集,用libname設(shè)置好邏輯庫(kù)后,卻仍然無(wú)法顯示,總是提示解析錯(cuò)誤,此時(shí)后用nofmterr選項(xiàng)遺漏掉此類錯(cuò)誤。
optionsnofmterr
(3)一鍵備份清理過(guò)SAS的所有結(jié)果
當(dāng)SAS結(jié)果窗口結(jié)果過(guò)多,期望盡快需要清理弄干凈,從一個(gè)干凈清爽的基礎(chǔ)重新開(kāi)始時(shí),dm命令就可以不派上用場(chǎng)了。
↑Results樹(shù)形目錄下最后很多
dmodsresults#34clear#34continue
真接運(yùn)行上面的代碼,送給你一個(gè)比較清爽的世界,效果不勝感激。
↑Results樹(shù)形目錄下結(jié)果一鍵設(shè)置清理過(guò)
(4)SAS繪圖設(shè)計(jì)器幫你寫(xiě)cad作圖代碼
關(guān)於SAS繪圖,我曾寫(xiě)過(guò)系列教程,目錄如下:
但是真正不愿意去用SAS寫(xiě)代碼繪圖的人相對(duì)多。不過(guò),我們可以不試一下%sgdesign,用可拖拽的辦法繪圖,因此是可以存放背后的SASGTL代碼為日后所用。
%sgdesign
↑sgdesigner
↑圖及GTL代碼
(5)逃出「黑洞」錯(cuò)誤
還有沒(méi)有見(jiàn)到過(guò)那樣一種情況:運(yùn)行程序任何SAS代碼,SAS都沒(méi)有任何結(jié)果,也沒(méi)有錯(cuò)誤反饋處理,僅僅在log里反復(fù)重復(fù)不顯示你的代碼。
這就是有所謂的「黑洞」錯(cuò)誤,你進(jìn)入到了這樣一個(gè)「黑洞」,任何不運(yùn)行的SAS代碼都被他吸入,木有任何反饋!
神馬?你才剛遇到了過(guò),很顯然磨煉算夠啊。運(yùn)行下面一段宏代碼,再試一下后面其他SAS過(guò)程步。
%macrotest
%bringThis isa#34BalkHole#34test
%bring****%str(Gu#39sWechat)****
%mend
%test
/*以下代碼無(wú)論咋運(yùn)行是沒(méi)反應(yīng)啊*/
procprint
run
怎末破?運(yùn)行下面代碼,是可以突然冒出來(lái)!
#39)
%mend
反正,這個(gè)示例我還是比較好很簡(jiǎn)單,細(xì)細(xì)的看仔細(xì)觀察宏定義,發(fā)現(xiàn)問(wèn)題可能就本質(zhì)單引號(hào)不看操作導(dǎo)致。求完整的匹配是這樣的:
%throwing****%str(Gu#39sWechat)****%mend#39)%mend
可是,假如在緊張一點(diǎn)兒的宏,我們可能就沒(méi)那你太容易幾眼可以找到問(wèn)題所在的位置了,尚幸的是,我們是可以用一段可用代碼,多次運(yùn)行程序,等他再次出現(xiàn),就是可以逃走黑洞!這那是:
*#39*#34*)*/%mendkick
(6)SASEG/SASStudio寫(xiě)代碼
初學(xué)者,很可能我總是記不住函數(shù),記不住選項(xiàng)。沒(méi)多大關(guān)系,讓SAS自動(dòng)給我們電腦提示吧。此時(shí),也可以試下在SASEG或是SASStudio里寫(xiě)代碼。
↑SASstudio
(7)一鍵備份格式話別人凌亂不堪的代碼
遇到了別人寫(xiě)的無(wú)法直視的SAS代碼,你以為要白白忍受嗎?別了,在SAS EG里借助于ctrli一鍵設(shè)置縮起代碼,這一世齊整整,一鍵恢復(fù)治好強(qiáng)迫癥患者。