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

下載本文檔

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

文檔簡介

數(shù)據(jù)步入門

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

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

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

putx=y=z=

;

inputxy

;

z=x+y

;

putx=y=z=

;

cards;

1020100200

;run;

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

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

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

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

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

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

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

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

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

5數(shù)據(jù)步入門

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

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

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

OBSXYZ110203021002003006數(shù)據(jù)步入門

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

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

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

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

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

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

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

評論

0/150

提交評論