R2 | #30天專注橙長計劃#~SAS~Day 04


1.3 SAS程序的兩個過程

SAS程序有兩個基本模塊:數(shù)據(jù)步和過程步。一個典型的SAS程序,由數(shù)據(jù)步創(chuàng)建SAS數(shù)據(jù)集開始,再由過程步分析數(shù)據(jù)。這里有一個例子:數(shù)據(jù)步中將米轉(zhuǎn)化成千米,過程步中輸出結(jié)果

數(shù)據(jù)步和過程步由語句組成(廢話),一個過程少至1條語句、多至幾百條。新手常犯的錯誤是將兩種過程語句用混,只要記住數(shù)據(jù)步負(fù)責(zé)讀取、修改數(shù)據(jù),過程步負(fù)責(zé)分析數(shù)據(jù)、輸出報告和效用函數(shù),就不會犯錯。

數(shù)據(jù)步由DATA語句開始:data+數(shù)據(jù)名。上例中數(shù)據(jù)步處理了名為distance的數(shù)據(jù)。為了讀取外部數(shù)據(jù)、未加工的數(shù)據(jù),數(shù)據(jù)步提供了DO LOOPS,IF-THEN/ELSE,以及一些數(shù)值和字符函數(shù)。數(shù)據(jù)步也可以按照你想要的方式合并數(shù)據(jù)集,包括聯(lián)接(concatenation)和合并(match-merge)。

過程步由proc語句開始:proc+過程名(print、sort、means…),SAS過程步可以處理從數(shù)據(jù)儲存、輸出到方差分析、3D圖表的一切操作。

當(dāng)程序遭遇DATA\PROC等標(biāo)志著新程序開始的語句時,程序結(jié)束。如果運(yùn)行的是批處理,則run代表語句的結(jié)束。Run告訴SAS去執(zhí)行所有之前的程序行,全局變量不是DATA或PROC過程的部分。上圖的那個程序,當(dāng)proc出現(xiàn)時,代表data過程結(jié)束。

典型的程序是以DATA語句開頭,輸入或修改數(shù)據(jù),然后將數(shù)據(jù)傳遞給PROC語句。但并不一定非要用這種模式來混合data和proc語句,你可以用任何順序來排列data和proc兩者的順序,一個程序甚至可以僅有data語句或proc語句。

下表是data語句和proc語句的一些基本不同點:


這只是一個簡化表,SAS軟件非常靈活,所以data語句和proc語句之間真正的區(qū)別也是很模糊的。記住,這個表并不是說proc語句永遠(yuǎn)不能創(chuàng)建SAS數(shù)據(jù)集,或者DATA語句永遠(yuǎn)不能夠分析生成報告。

1.4 數(shù)據(jù)步的內(nèi)置循環(huán)

Data步讀取并修改數(shù)據(jù),讓你以靈活的方式控制處理數(shù)據(jù)。Data步也有一個潛在的、內(nèi)置的循環(huán)語句。你不用告訴SAS去執(zhí)行這個循環(huán),SAS會自動執(zhí)行。

數(shù)據(jù)步按照一行一行、一個觀測值一個觀測值的順序執(zhí)行

這句話的表意并不明確,許多新手直到成了老手都沒明白這句話的含義。

數(shù)據(jù)步“一行一行的執(zhí)行”,這句話很好理解。但很多新手還是容易在這里出錯,例如在沒有創(chuàng)建一個變量之前就使用它,如果Z變量是X、Y兩個變量組合的新變量,那么必須確定創(chuàng)建Z變量的語句在創(chuàng)建X、Y變量語句之后。

而“一個觀測值一個觀測值的執(zhí)行”就不是那么容易理解。這意味著SAS先讀取一個觀測值,然后對這個觀測值進(jìn)行數(shù)據(jù)步的所有語句(當(dāng)然也是一行一行的),然后再讀取第二個觀測值執(zhí)行。每次執(zhí)行SAS只有一個觀測值。

我們將SAS執(zhí)行的圖景放慢:SAS從你的數(shù)據(jù)集中讀取一個觀測值。SAS對你的這個觀測值執(zhí)行數(shù)據(jù)步,如果數(shù)據(jù)步一直運(yùn)行到結(jié)束而沒有錯誤,SAS會把當(dāng)前的觀測值寫入一個新的、輸出數(shù)據(jù)集中,并返回到數(shù)據(jù)步開頭,讀取第二個觀測值進(jìn)行執(zhí)行。當(dāng)最后一個觀測值都被寫入輸出數(shù)據(jù)集中之后,SAS結(jié)束數(shù)據(jù)步,進(jìn)入下一個步。


有一個類比,數(shù)據(jù)步就像是一個投票程序。當(dāng)你來到投票的地點,你會站在別人后面進(jìn)行排隊,排到你時,你會被問到:你叫什么名字,住在哪里。當(dāng)你回答之后,你可以投票。在這里,排隊的人就像是觀測值,投票的程序就像是數(shù)據(jù)步。一次只能讓一個人投票,每個人都相互獨立。并且投票的程序是一步一步來的,你不能沒說明自己的姓名和住址之前就投票。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容