SAS編程技術數(shù)據(jù)步讀入原始數(shù)據(jù)課件_第1頁
SAS編程技術數(shù)據(jù)步讀入原始數(shù)據(jù)課件_第2頁
SAS編程技術數(shù)據(jù)步讀入原始數(shù)據(jù)課件_第3頁
SAS編程技術數(shù)據(jù)步讀入原始數(shù)據(jù)課件_第4頁
SAS編程技術數(shù)據(jù)步讀入原始數(shù)據(jù)課件_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第5章章 數(shù)據(jù)步讀入原始數(shù)據(jù)數(shù)據(jù)步讀入原始數(shù)據(jù)清華大學經(jīng)管學院清華大學經(jīng)管學院 朱世武朱世武ZResdat樣本數(shù)據(jù):樣本數(shù)據(jù):SAS論壇:論壇: 原始數(shù)據(jù)分類原始數(shù)據(jù)分類 原始數(shù)據(jù)一般分為字符和數(shù)值兩種類型,數(shù)值數(shù)據(jù)又分為標準數(shù)值數(shù)據(jù)和非標準數(shù)值數(shù)據(jù)。標準數(shù)據(jù)標準數(shù)據(jù)是由字符或者數(shù)值組成的可以被列表、列、格式化、命名輸入方式讀入的數(shù)據(jù)如ARKANSAS,1166.42。非標準數(shù)據(jù)非標準數(shù)據(jù)只能在輸入格式的幫助下讀入的數(shù)據(jù)。如非標準的數(shù)值數(shù)據(jù),可能包含逗號,空格等符號。日期和時間數(shù)值。十六進制和二進制數(shù)值。標準數(shù)值數(shù)據(jù)標準數(shù)值數(shù)據(jù)只包含數(shù)字,小數(shù)點或負號。非標準數(shù)值數(shù)據(jù)非標準數(shù)值數(shù)據(jù)則包含其它

2、的特殊字符,如千分號,美元符號等。 讀取數(shù)值數(shù)據(jù)的規(guī)則數(shù)值前面的括號或者減號符號表示該數(shù)值為負。首位有一個或者多個零不影響對相應變量的賦值。SAS不把數(shù)值尾部的空格默認為0。數(shù)值數(shù)據(jù)的前后都可以有空格,但是數(shù)字中間不能有(除非用COMMA. 或BZ.格式讀入)。字符數(shù)據(jù)字符數(shù)據(jù) 字符數(shù)據(jù)是由一系列字符組成的數(shù)據(jù)。下面任一種情況下,INPUT語句認定讀入變量的值是字符值。INPUT語句中變量名后跟一個美元符號$;使用字符輸入格式;要讀入數(shù)據(jù)的變量已經(jīng)被定義為字符值。原始數(shù)據(jù)呈現(xiàn)形式原始數(shù)據(jù)呈現(xiàn)形式 原始數(shù)據(jù)的呈現(xiàn)形式一般分為呈現(xiàn)在SAS編輯窗口的數(shù)據(jù)行,和儲存在外部文件中的原始數(shù)據(jù)例例5.1 編

3、輯窗口下,數(shù)據(jù)行形式的原始數(shù)據(jù)。data weight; input PatientID $ Week1 Week8 Week16; loss=Week1-Week16; datalines;2477 195 177 1632431 220 213 1982456 173 166 1552412 135 125 116;例例5.2 儲存在外部文件中的原始數(shù)據(jù),TXT文本格式。-1-22477 195 177 1632431 220 213 1982456 173 166 1552412 135 125 116使用使用INPUT語句讀入原始數(shù)據(jù)語句讀入原始數(shù)據(jù) INPUT語句的用途有兩方面:讀入

4、外部數(shù)據(jù)文件中的數(shù)據(jù);讀入CARDS語句后面的數(shù)據(jù)。 INPUT語句的五種輸入方式語句的五種輸入方式 簡單方式:INPUT ; 列方式:INPUT variable start-column ; 格式化方式:INPUT variable informat. ; INPUT (variable-list) (informat-list) ; INPUT (variable-list) ( informat.); 列表方式:INPUT variable ; INPUT variable ; 命名方式:INPUT variable= ; INPUT variable= start-column ;

5、INPUT variable=informat. ; 選項說明specification(s)變量及其格式的詳細說明variable-list列出要讀入數(shù)據(jù)值的變量執(zhí)行下一個INPUT語句時指針移到下一記錄行,要求一條記錄必須對應一個數(shù)據(jù)行執(zhí)行下一個INPUT語句時指針保持在當前記錄行,不要求一條記錄對應一個數(shù)據(jù)行$ 定義字符型變量start-column規(guī)定變量值在記錄行中的起始列end-column規(guī)定變量值在記錄行中的終止列decimalplaces小數(shù)點位置pointer-control 移動輸入指針到指定的行或列上informat 列出變量的輸入格式;informat-list -列

6、出變量列表對應的輸入格式列表decimals規(guī)定小數(shù)部分的位數(shù)列方式輸入列方式輸入 語句格式INPUT variable start-column ; 設定變量名稱,為可選項,如果選擇$則表示這是一個字符變量。而start-column 表示該變量在記錄行中的起始列(終止列)。例例5.3 使用列方式輸入數(shù)據(jù)。data scores;infile datalines truncover;input name $ 1-10 sex $11 age 12-15 ;datalines;Justine F 12Bob M 13;-+-1-+-2-+-3-+- 例中,規(guī)定記錄行的第1到10列為變量NAME

7、的輸入值,11列為變量SEX的輸入值,12到15列為變量AGE的輸入值。NAME和SEX為字符型變量。列方式輸入使用條件列方式輸入使用條件原始數(shù)據(jù)輸入值的位置在每個記錄行相同的列中; 原始數(shù)據(jù)輸入值是標準的數(shù)值格式或一般字符格式。列方式輸入的特點列方式輸入的特點原始數(shù)據(jù)輸入值可以按任意順序讀取;字符型原始數(shù)據(jù)中間可以有空格;可以重復讀取原始數(shù)據(jù)記錄行的某一部分。讀入的數(shù)據(jù)值不需要用空格或者其它分隔符隔開。列表方式輸入列表方式輸入 簡單列表方式輸入簡單列表方式輸入INPUT variable ; 調整列表方式輸入調整列表方式輸入INPUT variable ;列表方式輸入使用條件輸入數(shù)據(jù)值之間至

8、少有一個至少有一個空格隔開;用小數(shù)點表示表示缺失值;字符型值的默認長度為8個字節(jié),也可以用LENGTH, ATTRIB, INFORMAT語句規(guī)定長度;數(shù)據(jù)必須是字符數(shù)據(jù)或標準的數(shù)值數(shù)據(jù)。數(shù)據(jù)必須是字符數(shù)據(jù)或標準的數(shù)值數(shù)據(jù)。列表方式輸入格式修飾符 :當原始數(shù)據(jù)是以空格為分隔符時,要想對變量值長度不一致的變量規(guī)定統(tǒng)一長度就必須用到該格式修飾符。規(guī)定變量值是從非空格列中讀取, 直到第一次遇到以下三種情況之一,該變量值的讀取過程才結束:l 下一個空格列;l 達到變量預先設定的長度(如果沒有預先設定變量長度就是SAS默認字符長度8個字節(jié));l 數(shù)據(jù)行結束。例例5.5 空格為分隔符時,對變量值長度不一致

9、的變量規(guī)定統(tǒng)一長度。data;input Univ : $12. Plc$ Zip ;cards;MIT Boston 100023 TsinghuaUniv Beijing 100084;例中,第一個觀測變量Univ的值為MIT(只讀3個字符,因遇到空格而結束)第二個觀測值為TsinghuaUniv(得到先前定義的變量長度12)。如果只對變量Univ規(guī)定長度,而不加格式修飾符(:),在讀入第一條記錄時就會出錯,如果不對變量Univ規(guī)定長度,讀入第二條記錄時就會只讀入Tsinghua,而不是預先要讀入的TsinghuaUniv,這是因為SAS默認的字符變量的存儲長度就是8個字節(jié)。UnivPlc

10、ZipMITBoston100023TsinghuaUnivBeijing100084加格式修飾符(:)不加格式修飾符(:)UnivPlc ZipMIT Boston 100023 .&字符型輸入值可能包含一個或幾個空格。因為空格是列表讀入方式默認的分隔符,所以,如果要讀入的數(shù)據(jù)值本身包括空格時就必須用此格式符。例5.6 空格為分隔符時,字符型輸入值嵌有空格。data ;input name & $12. age;cards;Jiang Zhu 20Annie Zheng 31I. Altman 60;run;例中,第一個觀測name 中Jiang Zhu (包含一個空格),第

11、二個觀測為Annie Zheng (包含一個空格)。分隔符為兩個空格。注意:因注意:因&有以上特性,數(shù)據(jù)之間應該用兩個以上的空格隔開。有以上特性,數(shù)據(jù)之間應該用兩個以上的空格隔開。規(guī)定讀入字符值時保留引號。此選項只在INFILE語句中與選項DSD一起使用時才有效。注意:DSD選項在第六章會有詳細介紹。這里先說明它的4個功能:l 將默認分隔符改為逗號;l 對于連續(xù)的兩個分隔符,中間按缺失值處理;l 將字符變量值的引號去掉;l 對引號里的分隔符按字符來對待。所以INFILE語句中的DSD選項自動把數(shù)據(jù)記錄的分隔符設置為逗號,并且讀入數(shù)據(jù)之前,把字符數(shù)據(jù)中的引號去掉,若加上就會保留數(shù)據(jù)中的引

12、號。可以通過下面的這個例子來理解DSD和的作用。例例5.7 DSD和的作用,讀入字符值時保留引號。 只在INFILE語句中與選項DSD一起使用時才有效。data topics2;infile datalines dsd;input speakers : $15. title $40. location & $10.;datalines;Song, Credit Derivatives, Room 329Zhu, Credit Risk Management, Room 406;proc print;run;由上例可以看出,“”包含包含“:”選項的功能選項的功能。例中,雖然title變量

13、的長度是40,而觀測值得長度都不到40,仍然可以得到正確結果。所以“”包含 “:”的功能。 把speakers后面的“:”改成了“”也可以。例如:data topics2;infile datalines dsd;input speakers $15. title $40. location & $10.;datalines;Song, Credit Derivatives, Room 329Zhu, Credit Risk Management, Room 406;proc print;run;輸出窗口信息:Obs speakers title location 1 Song Cre

14、dit Derivatives Room 329 2 Zhu Credit Risk Management Room 406 但是,若把title后成的“”改成 “:”,引號就因為dsd選項的存在被去掉。如下:data topics2;infile datalines dsd;input speakers : $15. title :$40. location & $10.;datalines;Song, Credit Derivatives, Room 329Zhu, Credit Risk Management, Room 406;proc print;run;輸出窗口信息Obs

15、speakers title location 1 Song Credit Derivatives Room 329 2 Zhu Credit Risk Management Room 406格式化方式輸入格式化方式輸入 格式化輸入方式是INPUT語句讀取非標準數(shù)據(jù)讀取非標準數(shù)據(jù)的唯一方法。即在變量名后面規(guī)定輸入格式。這種輸入方式不僅給出了該輸入數(shù)據(jù)所對應的類型,而且給出了輸入數(shù)據(jù)所在列的長度。語句格式:語句格式:INPUT variable informat. ; INPUT (variable-list) (informat-list) ; INPUT (variable-list) (

16、informat.); 其中:n*規(guī)定在輸入列表中后面的輸入格式重復n次。例例5.8 格式化方式輸入。data;infile datalines;Input (X1-X5) (3*7.2, 2*5.2);.例中,前3個變量X1-X3的格式為7.2,而后2個變量X4-X5的格式為5.2例例5.9 讀入非標準數(shù)據(jù)$1,000.22。data one;input x comma9.2;datalines;$1,000.22;run;例中,讀入的數(shù)據(jù)為1000.22,這里要注意長度,該數(shù)據(jù)符號加上數(shù)字一共是九列。命名方式輸入命名方式輸入 如果數(shù)據(jù)行中含有變量的名字,后面跟著等號和變量的值,讀取數(shù)據(jù)時應

17、該使用命名輸入方式。語句格式INPUT variable= ; INPUT variable= start-column ; INPUT variable=informat. ; 其中:variable=規(guī)定用于INPUT語句讀入的變量名。例例5.11 使用命名輸入格式。data a;input date yymmdd10. fullshr stkcd=$ lstknm=$ ;cards;2001-01-18 1486553100 stkcd=600001 lstknm=邯鄲鋼鐵;run;后面變量的不采用命名輸入格式,讀入數(shù)據(jù)時出錯。data a;input date yymmdd10. st

18、kcd=$ lstknm=$ fullshr;cards;2001-01-18 stkcd=600001 lstknm=邯鄲鋼鐵 1486553100;run;Log窗口顯示出錯信息:NOTE: LOST CARD.RULE: -+-1-+-2-+-3-+-4-+-5-+-6-+-7-+-8-date=14993 stkcd=600001 lstknm=邯鄲鋼鐵 fullshr=. _ERROR_=1 _N_=1NOTE: INPUT 語句到達一行的末尾,SAS 已轉到新的一行。NOTE: 數(shù)據(jù)集 WORK.A 有 0 個觀測和 4 個變量。第第20章章 SQL從單個表中檢索數(shù)據(jù)從單個表中檢索

19、數(shù)據(jù)清華大學經(jīng)管學院清華大學經(jīng)管學院 朱世武朱世武ZResdat樣本數(shù)據(jù):樣本數(shù)據(jù):SAS論壇:論壇: SELECT語句綜述語句綜述 SELECT語句是PROC SQL的主要工具。使用SELECT語句可以識別、檢索和操作表中的數(shù)據(jù),使用SELECT子句可以設定查詢條件。SELECT語句格式語句格式 SELECT object-item INTO macro-variable-specification FROM from-list GROUP BY group-by-item ORDER BY order-by-item ; SELECT 子句子句 語句格式語句格式SELECT object-

20、item FROM from-list選擇所有列選擇所有列 語句格式:COLUMN-NAME= * (asterisk) select * from from-listSELECT子句中,“*”號表示選擇表中的所有列。例:例:proc sql outobs=3; select * from ResDat.dret;選擇特定列選擇特定列 語句格式:Select column-name from from-list例例20.120.1 選擇特定列。proc sql outobs=3;title 股票代碼;select stkcd from resdat.lstkinfo;proc sql outo

21、bs=3;title 股票代碼和名稱;select stkcd,lstknm from resdat.lstkinfo;quit;用用DISTINCT語句剔除查詢結果中重復觀測語句剔除查詢結果中重復觀測 語句格式:=distinct例例20.2 刪除重復觀測。proc sql; select distinct stkcd from ResDat.yrret;quit;創(chuàng)建說明列創(chuàng)建說明列 語句格式:SELECT TEXT, COLUMN-NAME例20.4 創(chuàng)建說明列。proc sql outobs=3; select Stock Code for, lstknm, is, stkcd fro

22、m ResDat.lstkinfo; quit; 輸出窗口結果: 最新股票名稱| Latest Stock 股票代碼|Sto Name ck Code - Stock Code for S深發(fā)展A is 000001 Stock Code for 萬科A is 000002 Stock Code for *ST國農(nóng) is 000004計算新列值計算新列值 語句格式:Calculating Values =Calculating Expression of columns 例例20.5 計算股票每日成交金額。proc sql outobs=3; title Trading Sum; select

23、 stkcd, lstknm, clpr*trdvol format=12.2 from ResDat.qttndist;quit; Trading Sum 最新股票名稱| 股票代碼|Sto Latest Stock ck Code Name - 000001 S深發(fā)展A 3946648.52 000001 S深發(fā)展A 1420743.60 000001 S深發(fā)展A 1120732.50為列分配別名為列分配別名 語句格式:SELECT calculation-form 別名必須符合SAS名稱要求,別名只在當前的查詢中有效。例例20.6 為列分配別名。proc sql outobs=3; tit

24、le Trading Sum; select stkcd, lstknm, clpr*trdvol as trdsum format=12.2 from ResDat.qttndist;quit; Trading Sum 最新股票名稱| 股票代碼|Sto Latest Stock ck Code Name trdsum - 000001 S深發(fā)展A 3946648.52 000001 S深發(fā)展A 1420743.60 000001 S深發(fā)展A 1120732.50CALCULATED 語句語句 語句格式:Calculated Column-name使用別名引用一個計算過的列值時,必須使用Cal

25、culated 關鍵詞,并將Calculated放在列名稱之前,以此告知PROC SQL這個列是經(jīng)計算得到的。proc sql outobs=3;select stkcd,lstknm,date,clpr*mcfacpr as adjpr format 8.2,(calculated adjpr*trdvol) as trdsum format 12.2 from resdat.qttndist;quit; 最新股票名稱|股票代碼|Sto Latest Stockck Code Name 日期|Date adjpr trdsum -000001 S深發(fā)展A 1991-01-02 66.94 3

26、946648.52000001 S深發(fā)展A 1991-01-03 66.89 1420743.60000001 S深發(fā)展A 1991-01-04 66.75 1120732.50CASE表達式表達式 語句格式: CASE WHEN when-condition THEN result-expression END例例20.7 簡單形式的Case表達式。proc sql outobs=3;select stkcd,lstknm,lstdt, case when exchflg=1 then 上交所 when exchflg=2 then 深交所 else 所有交易所 end as exchflg

27、from resdat.lstkinfoorder by lstdt; quit;例中,將股票信息表lstkinfo交易所標識(exchflg)的編碼值進行轉換,同時得到新的交易所標識列及相關數(shù)值。 最新股票名稱|股票代碼|Sto Latest Stock 股票上市日|Lck Code Name ist Date exchflg-000005 ST星源 1990-12-10 深交所600652 愛使股份 1990-12-19 上交所 600602 廣電電子 1990-12-19 上交所使用使用ORDER BY語句排序語句排序 語句格式語句格式ORDER BY order-by-item , .

28、 order-by-item ; 選項說明: order-by-item 可以是如下: integer等同于一個列在SELECT子句中的位置column-name列的名稱或者別名sql-expression見附錄中的sql-expressionASC升序排列數(shù)據(jù),默認方式DESC降序排列數(shù)據(jù)例例20.9 對股票上市時間列進行排序。proc sql outobs=3;select lstknm,lstdt from resdat.lstkinfoorder by lstdt; quit;最新股票名稱|Latest Stock 股票上市日|LName ist Date-ST星源 1990-12-1

29、0愛使股份 1990-12-19廣電電子 1990-12-19可以通過指定列在SELECT子句中的整數(shù)位置對該列排列。例例20.11 按第4列排序。proc sql outobs=3;select stkcd,lstknm,date,clpr*mcfacpr as adjpr format 8.2from resdat.qttndistorder by 4 desc;quit; 最新股票名稱|股票代碼|Sto Latest Stockck Code Name 日期|Date adjpr-600652 愛使股份 2001-05-15 105881.8600652 愛使股份 2001-05-16

30、103950.1600652 愛使股份 2001-05-14 103020.1用用WHERE語句選擇觀測語句選擇觀測 語句格式語句格式WHERE sql-expression 選項說明: sql-expression (見sql-expression定義). 例例20.13 用WHERE語句選擇1991年以前上市的股票。proc sql outobs=3;select lstknm, lstdt from resdat.lstkinfo where lstdt31dec1991d;quit; 最新股票名稱|Latest Stock Name 股票上市日|List Date-S深發(fā)展A 1991

31、-04-03萬科A 1991-01-29*ST國農(nóng) 1991-01-14使用使用IN算符算符例20.14 簡單IN算符用法。proc sql outobs=3;select lstknm, stkcd from resdat.lstkinfo where stkcd in (000001 600651 000004);quit;最新股票名稱| Latest Stock Name 股票代碼|Stock Code-S深發(fā)展A 000001*ST國農(nóng) 000004飛樂音響 600651使用使用BETWEEN-AND 算符算符 例例20.16 使用BETWEEN-AND算符選擇滿足一定范圍的觀測。pr

32、oc sql;create table stkinfo1991 as select * from resdat.lstkinfowhere lstdt between 1jan1991d and 31dec1991d;quit;使用使用LIKE算符算符 例例20.17 使用匹配算符LIKE選擇觀測。proc sql;select stkcd,lstknm from resdat.lstkinfo where lstknm like ST%;quit;股票代碼|Sto ck Code 最新股票名稱| Latest Stock Name -000005 ST星源600603 ST興業(yè)使用匯總函數(shù)匯總數(shù)據(jù)使用匯總函數(shù)匯總數(shù)據(jù) 使用匯總函數(shù)(aggregate function or summary function)可以產(chǎn)生數(shù)據(jù)的統(tǒng)計量。 用用WHERE子句匯總數(shù)據(jù)子句匯總數(shù)據(jù) 例例20.19 使用乘法函數(shù)算出代碼為000002的股票調整后的收盤價。proc sql outobs=3;select stkcd,lstknm,clpr*mcfacpr as adjpr from resdat.qttndist where stkcd=000002;

溫馨提示

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

評論

0/150

提交評論