SAS數(shù)據(jù)步編譯與執(zhí)行_第1頁(yè)
SAS數(shù)據(jù)步編譯與執(zhí)行_第2頁(yè)
SAS數(shù)據(jù)步編譯與執(zhí)行_第3頁(yè)
SAS數(shù)據(jù)步編譯與執(zhí)行_第4頁(yè)
SAS數(shù)據(jù)步編譯與執(zhí)行_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)步入門(mén)

SAS語(yǔ)言是一種專(zhuān)用的數(shù)據(jù)管理、分析語(yǔ)言,它提供了很強(qiáng)的數(shù)據(jù)操作能力。這些數(shù)據(jù)操作能力表現(xiàn)在它可以容易地讀入任意復(fù)雜格式的輸入數(shù)據(jù),并可以對(duì)輸入的數(shù)據(jù)進(jìn)行計(jì)算、子集選擇、更新、合并、拆分等操作。另外,SAS系統(tǒng)還提供了用來(lái)訪(fǎng)問(wèn)其它數(shù)據(jù)庫(kù)系統(tǒng)如Sybase、Oracle的接口,訪(fǎng)問(wèn)各種微機(jī)使用的數(shù)據(jù)庫(kù)文件,如FoxPro、Excel的接口及向?qū)?,并提供了一個(gè)SQL過(guò)程來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言SQL的功能。

SAS語(yǔ)言直接、間接用于數(shù)據(jù)管理的語(yǔ)句很多,本章只能介紹最常用的一些語(yǔ)句。1數(shù)據(jù)步入門(mén)

SAS語(yǔ)言的編程計(jì)算功能主要在數(shù)據(jù)步實(shí)現(xiàn)。一個(gè)SAS數(shù)據(jù)步相當(dāng)于一個(gè)單獨(dú)運(yùn)行的程序。但是,SAS語(yǔ)言又是一個(gè)專(zhuān)用數(shù)據(jù)處理語(yǔ)言,所以SAS數(shù)據(jù)步有其它語(yǔ)言所沒(méi)有的特點(diǎn)。我們以下面的簡(jiǎn)單例子說(shuō)明這一點(diǎn):dataa;

putx=y=z=

;

inputxy

;

z=x+y

;

putx=y=z=

;

cards;

1020100200

;run;

(sasLan21.sas)2數(shù)據(jù)步入門(mén)

……X=.Y=.Z=.X=10Y=20Z=30X=.Y=.Z=.X=100Y=200Z=300X=.Y=.Z=.NOTE:ThedatasetWORK.Ahas2observationsand3variables.運(yùn)行后在LOG窗口顯示如下記錄:這個(gè)程序的運(yùn)行流程是這樣的:

⑴DATA語(yǔ)句標(biāo)志了數(shù)據(jù)步開(kāi)始,并指定了數(shù)據(jù)步結(jié)束時(shí)要生成的數(shù)據(jù)集名字為A(實(shí)際是WORK.A)。3數(shù)據(jù)步入門(mén)

⑵第一個(gè)PUT語(yǔ)句要輸出變量X、Y、Z的值,但它們還都沒(méi)有定義,所以L(fǎng)OG窗口的結(jié)果顯示為三個(gè)缺失值.⑶下面是INPUT語(yǔ)句,它從CARDS語(yǔ)句后面的數(shù)據(jù)行中讀取變量X的值10,變量Y的值20。

⑷下一個(gè)賦值語(yǔ)句計(jì)算變量Z的值得到30。因此,LOG窗口中的第二行輸出顯示三個(gè)變量的值分別為10、20、30。

⑸從CARDS語(yǔ)句開(kāi)始到空語(yǔ)句(;)的各行是非執(zhí)行的,程序運(yùn)行到RUN語(yǔ)句,發(fā)現(xiàn)這是本數(shù)據(jù)步的最后一個(gè)語(yǔ)句,按一般的程序語(yǔ)言的規(guī)則,程序到這里就應(yīng)該結(jié)束了,程序中的第二行數(shù)據(jù)100200就不能被讀入.4數(shù)據(jù)步入門(mén)

但SAS是一個(gè)專(zhuān)用的數(shù)據(jù)處理語(yǔ)言,所以,這個(gè)程序運(yùn)行到RUN語(yǔ)句后,先把讀入的觀測(cè)(這是第一個(gè)觀測(cè))寫(xiě)入輸出數(shù)據(jù)集;并繼續(xù)執(zhí)行下面步驟。

⑹又返回到DATA語(yǔ)句后的第一個(gè)可執(zhí)行語(yǔ)句開(kāi)始執(zhí)行,并先把所有的變量置初值為缺失值.于是,第一個(gè)PUT語(yǔ)句的結(jié)果顯示三個(gè)變量均為缺失值,而不是上一步的10、20、30。

⑺下一個(gè)INPUT語(yǔ)句從數(shù)據(jù)行中讀入下一個(gè)觀測(cè),把變量X、Y賦值100、200。讀取位置由運(yùn)行時(shí)設(shè)置的一個(gè)數(shù)據(jù)指針指示。然后計(jì)算變量Z的值得300。于是PUT語(yǔ)句輸出的X、Y、Z值分別為100、200、300。

5數(shù)據(jù)步入門(mén)

⑻然后,運(yùn)行控制跳過(guò)CARDS語(yǔ)句到空語(yǔ)句,到數(shù)據(jù)步結(jié)尾,把第二個(gè)觀測(cè)輸出到數(shù)據(jù)集,

⑼再返回到數(shù)據(jù)步開(kāi)頭,把變量值賦初值為缺失值,所以第一個(gè)PUT語(yǔ)句輸出的三個(gè)變量值為缺失值。

⑽然后運(yùn)行到INPUT語(yǔ)句,應(yīng)該讀入下一個(gè)觀測(cè),但是查詢(xún)數(shù)據(jù)指針發(fā)現(xiàn)已經(jīng)讀完了所有數(shù)據(jù),所以本數(shù)據(jù)步結(jié)束,并把兩個(gè)觀測(cè)寫(xiě)入數(shù)據(jù)集WORK.A中。提交PROCPRINT;RUN;顯示此數(shù)據(jù)集的內(nèi)容如下:

OBSXYZ110203021002003006數(shù)據(jù)步入門(mén)

從這個(gè)例子可以看出SAS數(shù)據(jù)步程序和普通程序的一個(gè)重大區(qū)別:SAS數(shù)據(jù)步如果有數(shù)據(jù)輸入,比如用INPUT、SET、MERGE、UPDATE、MODIFY等語(yǔ)句讀入數(shù)據(jù),則數(shù)據(jù)步中隱含了一個(gè)循環(huán),即數(shù)據(jù)步程序執(zhí)行到最后一個(gè)語(yǔ)句后,會(huì)返回到數(shù)據(jù)步內(nèi)的第一個(gè)可執(zhí)行語(yǔ)句開(kāi)始繼續(xù)執(zhí)行,直到讀入數(shù)據(jù)語(yǔ)句(INPUT、SET、MERGE、UPDATE、MODIFY等)讀入了數(shù)據(jù)結(jié)束標(biāo)志為止才停止執(zhí)行數(shù)據(jù)步,并把讀入的各個(gè)觀測(cè)寫(xiě)入在DATA語(yǔ)句中指定的數(shù)據(jù)集內(nèi)。如果沒(méi)有數(shù)據(jù)輸入而只是直接計(jì)算,則數(shù)據(jù)步程序不需要此隱含循環(huán)。數(shù)據(jù)步因?yàn)橛羞@樣一個(gè)隱含循環(huán),所以也提供了用來(lái)查詢(xún)某一步是第幾次循環(huán)的特殊變量_N_,它的值為數(shù)據(jù)步循環(huán)計(jì)數(shù)值。7數(shù)據(jù)步入門(mén)

數(shù)據(jù)步流程圖8數(shù)據(jù)步的編譯和執(zhí)行階段編譯階段(CompilationPhase):在這個(gè)階段,系統(tǒng)掃描每個(gè)語(yǔ)句檢查它是否有語(yǔ)法錯(cuò)誤。大部分語(yǔ)法錯(cuò)誤導(dǎo)致系統(tǒng)無(wú)法對(duì)數(shù)據(jù)步作進(jìn)一步的處理。在編譯階段將建立要?jiǎng)?chuàng)建的數(shù)據(jù)集的描述部分。執(zhí)行階段(ExecutionPhase):若數(shù)據(jù)步編譯成功,就開(kāi)始執(zhí)行階段。在這個(gè)階段對(duì)源數(shù)據(jù)文件的每一條記錄斗執(zhí)行一次數(shù)據(jù)步,除非在程序中指明其它處理方式。在這個(gè)階段建立數(shù)據(jù)集的數(shù)據(jù)部分。9數(shù)據(jù)步的編譯階段對(duì)程序進(jìn)行詞語(yǔ)和語(yǔ)法檢查,檢查它是否有語(yǔ)法錯(cuò)誤;將程序轉(zhuǎn)換為機(jī)器碼,供執(zhí)行階段使用;建立工作部件輸入緩沖器(InputBuffer);建立工作部件PDV(程序數(shù)據(jù)列)(ProgramDataVector);建立數(shù)據(jù)集中各個(gè)變量的三個(gè)必須的屬性:Name,Type,Length;建立新建數(shù)據(jù)集的描述部分。10編譯階段(CompilationPhase):語(yǔ)法檢查的主要內(nèi)容:漏掉或錯(cuò)拼的關(guān)鍵詞無(wú)效的變量名遺漏或錯(cuò)誤的符號(hào)無(wú)效的選擇項(xiàng)在內(nèi)存中建立程序數(shù)據(jù)列PDV

用于建立SAS系統(tǒng)的數(shù)據(jù)集,一次只處理一個(gè)觀測(cè)兩個(gè)自動(dòng)變量

_N_記錄DATA步執(zhí)行的次數(shù)

_ERROR_指示出錯(cuò)信息.0表示無(wú)錯(cuò)誤,1表示有錯(cuò)誤PDV的一般格式:|_N_|_ERROR_||11建立數(shù)據(jù)集的描述部分?jǐn)?shù)據(jù)集名觀測(cè)數(shù)和變量個(gè)數(shù)變量名及其屬性12執(zhí)行階段(ExecutionPhase):創(chuàng)建數(shù)據(jù)集的數(shù)據(jù)部分執(zhí)行順序

PDV中外部為題初始化為缺省值輸入每條記錄至輸入緩沖器,按INPUT語(yǔ)句讀至PDV按數(shù)據(jù)步的其它語(yǔ)句處理后存入PDV在數(shù)據(jù)步結(jié)束時(shí)缺省地將PDV的內(nèi)容作為一條觀測(cè)寫(xiě)入新的數(shù)據(jù)集回到數(shù)據(jù)步的開(kāi)始.使PDV中外部變量初始化為缺省值對(duì)源文件中每條記錄都按上述步驟執(zhí)行一次當(dāng)對(duì)源文件最后一條記錄執(zhí)行結(jié)束后,數(shù)據(jù)步執(zhí)行完成.

13編譯階段databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序數(shù)據(jù)列|_N_|_ERROR_|SEX|FATPCT||||||databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序數(shù)據(jù)列|_N_|_ERROR_|SEX|FATPCT|FAT|||||||數(shù)據(jù)集名:bodyfat

變量的個(gè)數(shù)(從PDV中可知)觀測(cè)個(gè)數(shù)(執(zhí)行到RUN時(shí)也已知)變量名及屬性(從PDV中可知)14執(zhí)行階段databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序數(shù)據(jù)列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0|M|13.3|.|初始缺省值databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序數(shù)據(jù)列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0||.|.|databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序數(shù)據(jù)列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0|M

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論