SAS數據步編譯與執行_第1頁
SAS數據步編譯與執行_第2頁
SAS數據步編譯與執行_第3頁
SAS數據步編譯與執行_第4頁
SAS數據步編譯與執行_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據步入門

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

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

SAS語言的編程計算功能主要在數據步實現。一個SAS數據步相當于一個單獨運行的程序。但是,SAS語言又是一個專用數據處理語言,所以SAS數據步有其它語言所沒有的特點。我們以下面的簡單例子說明這一點:dataa;

putx=y=z=

inputxy

z=x+y

putx=y=z=

cards;

1020100200

;run;

(sasLan21.sas)2數據步入門

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

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

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

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

⑸從CARDS語句開始到空語句(;)的各行是非執行的,程序運行到RUN語句,發現這是本數據步的最后一個語句,按一般的程序語言的規則,程序到這里就應該結束了,程序中的第二行數據100200就不能被讀入.4數據步入門

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

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

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

5數據步入門

⑻然后,運行控制跳過CARDS語句到空語句,到數據步結尾,把第二個觀測輸出到數據集,

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

⑽然后運行到INPUT語句,應該讀入下一個觀測,但是查詢數據指針發現已經讀完了所有數據,所以本數據步結束,并把兩個觀測寫入數據集WORK.A中。提交PROCPRINT;RUN;顯示此數據集的內容如下:

OBSXYZ110203021002003006數據步入門

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

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

用于建立SAS系統的數據集,一次只處理一個觀測兩個自動變量

_N_記錄DATA步執行的次數

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

PDV中外部為題初始化為缺省值輸入每條記錄至輸入緩沖器,按INPUT語句讀至PDV按數據步的其它語句處理后存入PDV在數據步結束時缺省地將PDV的內容作為一條觀測寫入新的數據集回到數據步的開始.使PDV中外部變量初始化為缺省值對源文件中每條記錄都按上述步驟執行一次當對源文件最后一條記錄執行結束后,數據步執行完成.

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

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

程序數據列|_N_|_ERROR_|SEX|FATPCT|FAT|||||||數據集名:bodyfat

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

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

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

程序數據列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0|M

溫馨提示

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

評論

0/150

提交評論