2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章 數(shù)據(jù)步修改與選擇觀測,清華大學(xué)經(jīng)管學(xué)院 朱世武Zhushw@sem.tsinghua.edu.cnResdat樣本數(shù)據(jù):www.resset.cnSAS論壇: www.resset.cn,本章介紹數(shù)據(jù)步中用于修改與選擇觀測的語句。利用修改與選擇觀測語句,可以進(jìn)行數(shù)值計(jì)算、數(shù)據(jù)集修改、觀測子集選擇及輸出控制等。,賦值語句,語句格式: variable=expression;將表達(dá)式結(jié)果賦予一個變量。 選項(xiàng)說明:

2、,例7.1 賦值語句舉例 data a;set ResDat.class;by sex;n=_N_; error=_error_; first_s=first.sex; last_s=last.sex; proc print;run;x=a+b; /* 規(guī)定新變量x,它是a和b的和*/t(2)=sum(of x1-x5); /*規(guī)定數(shù)組元素,它的值是一函數(shù)值*/a=a+b; /*

3、規(guī)定一個已經(jīng)存在的變量a,它的值為原來值和b之和*/,結(jié)果顯示:,Obs Name Sex Age Height Weight n error first_s last_s 1 Alice F 13 56.5 84.0 1 0 1

4、 0 2 Barbara F 13 65.3 98.0 2 0 0 0 3 Carol F 14 62.8 102.5 3 0 0

5、 0 4 Jane F 12 59.8 84.5 4 0 0 0 5 Janet F 15 62.5 112.5 5 0 0

6、 0 6 Joyce F 11 51.3 50.5 6 0 0 0 7 Judy F 14 64.3 90.0 7 0 0

7、 0 8 Louise F 12 56.3 77.0 8 0 0 0 9 Mary F 15 66.5 112.0 9 0 0 1

8、 10 Alfred M 14 69.0 112.5 10 0 1 0 11 Henry M 14 63.5 102.5 11 0 0 0

9、 …… ……,結(jié)果變量類型,決定結(jié)果變量類型的準(zhǔn)則: 如果表達(dá)式中的變量全為數(shù)值型,結(jié)果變量為數(shù)值型; 如果表達(dá)式中的變量全為字符型,結(jié)果變量為字符型; 如果表達(dá)式中的變量既有數(shù)值又有字符型,結(jié)果變量為數(shù)值型。,結(jié)果變量長度,結(jié)果變量的長度是第一次掃描結(jié)果的長度,除非事先由LENGTH語句規(guī)定好結(jié)果變量的長度。 例7.2 第一掃描結(jié)果的長度不是所有數(shù)據(jù)中的最大長度時

10、會出錯 data a;lstknm='深發(fā)展'; /*第一掃描結(jié)果的長度為4 */lstknm ='大秦鐵路'; /* lstknm的長度為4,所以顯示結(jié)果為lstknm =大秦鐵*/proc print;run;,Obs lstknm----------------------------------------1 大秦鐵,例7.3 用LENGTH語句得到正確

11、輸出結(jié)果 data a;length lstknm $12; /* 規(guī)定變量lstknm的長度為12 */lstknm='深發(fā)展'; lstknm ='大秦鐵路'; proc print;run;,Obs lstknm----------------------------------------1 大秦鐵路,累加語句,語句格式: Variable+expres

12、sion;累加語句累加表達(dá)式結(jié)果。 選項(xiàng)說明:,應(yīng)用準(zhǔn)則: 累加變量的觀測被讀入之前,值為0; 表達(dá)式的計(jì)算結(jié)果為缺失值時,取0代替; 表達(dá)式可以使用比較算符; 語句A+(-B)中的(+)是必須的,不能寫成A-B。,例7.4 累加語句等于使用SUM函數(shù)和一個RETAIN語句data a (keep=name height s_h);set ResDat.class ;s_h+height;proc print;r

13、un;data b (keep=name height s_h);set fdata.class ;s_h=sum(s_h, height, 0); retain s_h 0; run;上面兩段程序等價,Obs Name Height s_h1 Alice 56.5 56.52 Barbara 65.3 121.83 Caro

14、l 62.8 184.64 Jane 59.8 244.45 Janet 62.5 306.96 Joyce 51.3 358.27 Judy 64.3 422.58 Louise 56.3 478.89 Mary 66.5 545.

15、3…… ……,應(yīng)用舉例,例7.5 表達(dá)式SUMX+X*X把X*X的結(jié)果加到SUMX上 data a (keep=date uss);set ResDat. Dret(where =(stkcd=’000002’));uss+ Dret**2; /*USS為變量Dret的平方和 */run;例7.6 計(jì)算非缺失值的觀測個數(shù)data a(keep=nmis);set ResDat

16、.indcls;nmis+sector^=' ';run;例中,NMIS為變量SECTOR非缺失值的觀測個數(shù),即按SECTOR分好類股票的個數(shù)。,DELETE語句,DELETE語句停止處理當(dāng)前觀測,該觀測值不被讀入到創(chuàng)建的數(shù)據(jù)集,SAS系統(tǒng)返回到DATA步的開頭處理其他觀測。語句格式:DELETE;,例7.7 刪除部分觀測值 data stka;set ResDat.lstkinfo;if Stktyp

17、e=’B’ then delete;run;例中,刪除數(shù)據(jù)集RESDAT中Stktype=’B’的觀測值。,例7.8 清空數(shù)據(jù)集 data a;set ResDat.lstkinfo;delete;run;例中,刪除數(shù)據(jù)集A中的所有觀測值,即清空數(shù)據(jù)集A。設(shè)計(jì)復(fù)雜程序時,常會用到DELETE語句的這種用法。,LOSTCARD語句,LOSTCARD語句用于重新對準(zhǔn)輸入數(shù)據(jù)。當(dāng)一個觀測包含幾個數(shù)據(jù)行,且當(dāng)前觀測缺少其中的一

18、些行時,利用LOSTCARD語句可以防止SAS系統(tǒng)從下一個觀測的數(shù)據(jù)行讀數(shù)據(jù)作為當(dāng)前觀測的一部分。語句格式LOSTCARD;使用LOSTCARD語句時,必須用IF-THEN語句給出丟失數(shù)據(jù)行的條件。適合使用LOSTCARD語句的情況有:每個觀測有固定的輸入數(shù)據(jù)行;同一個觀測的每個數(shù)據(jù)行都有一個同值的識別變量。,例7.9 每個數(shù)據(jù)行都有一個同值的識別變量data a;input id 1-3 reject #2 i

19、dc 1-3 pass; if id ne idc then do;put '數(shù)據(jù)行錯誤' id= idc=;lostcard;end;cards;301 32301 61432302 53302 83171400 92845411 46411 99551;proc print;title2 '每個觀測包含2個數(shù)據(jù)行';run;,每個觀測包

20、含兩個數(shù)據(jù)行 Obs id reject idc pass 1 301 32 301 61432 2 302 53 302 83171 3 411 46 411 99551,,LOSTCARD語句的執(zhí)行步驟:,SAS

21、日志上輸出一個丟失記錄卡信息,一條標(biāo)尺及創(chuàng)建當(dāng)前觀測所讀的數(shù)據(jù)行; 不輸出觀測到數(shù)據(jù)集,丟棄開始讀入本組的數(shù)據(jù)行,返回到DATA步開頭; 試圖用該組第二個數(shù)據(jù)行開始并按INPUT語句規(guī)定的行數(shù)讀數(shù)據(jù)行來創(chuàng)建觀測; 當(dāng)丟失記錄行的IF條件仍是真的,SAS重復(fù)前三步; 對于IF條件不成立的一組數(shù)據(jù)行,SAS創(chuàng)建一個觀測,并增加自動變量_N_的值。,例7.10 每個觀測包含3個數(shù)據(jù)行 data a;input id1 x $ #2

22、 id2 y $ # 3 id3 z $;if id1 ne id2 or id2 ne id3 then lostcard;cards;101 A102 B102 B103 C103 C103 C104 D105 E105 E105 E;proc print;title '每個觀測包含3個數(shù)據(jù)行';run;,每個觀測包含3個數(shù)據(jù)行 Obs id1 x

23、 id2 y id3 z1 103 C 103 C 103 C2 105 E 105 E 105 E,例中,DATA步讀3個數(shù)據(jù)行作為1個觀測。第1個觀測有2個丟失記錄,第2個觀測有1個丟失記錄,第4個觀測丟失2個記錄。只有第3和第5個觀測是完整的觀測。LOG窗口顯示的信息:NOTE: LOST CARD.RULE:

24、 ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----05 101 A6 102 B7 102 BNOTE: LOST CARD.8 103 CNOTE: LOST CARD.9

25、103 CNOTE: LOST CARD.11 104 D12 105 E13 105 ENOTE: 數(shù)據(jù)集 WORK.A 有 2 個觀測和 6 個變量。,STOP語句,STOP語句停止處理DATA步。當(dāng)遇到STOP語句時,正被處理的那個觀測沒有添加到SAS數(shù)據(jù)集上。語句格式:STOP;,例7.11 停止處理DATA步data a;set resdat.lstk

26、info;if _n_=5 then stop;proc print; /*OUTPUT窗口照常打印數(shù)據(jù)集列表 */run;例中,數(shù)據(jù)集A從數(shù)據(jù)集resdat.lstkinfo中讀取了4條觀測,因?yàn)楫?dāng)指針標(biāo)識_N_=5時,遇到STOP語句,正被處理的那條觀測沒有添加到數(shù)據(jù)集A中。,ABORT語句,ABORT語句中止執(zhí)行當(dāng)前的DATA步,繼續(xù)執(zhí)行下一個DATA或PROC步。執(zhí)行ABORT語句時,創(chuàng)建ABORT語句執(zhí)行前已處理

27、觀測的數(shù)據(jù)集。但是,當(dāng)新創(chuàng)建數(shù)據(jù)集和已存在的SAS數(shù)據(jù)集同名時,不能覆蓋已存在的數(shù)據(jù)集。 語句格式 :ABORT|;,RETURN選項(xiàng)說明,立即使當(dāng)前的SAS作業(yè)或會話正常結(jié)束。產(chǎn)生的結(jié)果依賴于執(zhí)行的方式。批處理方式和非交互方式下: 立即停止處理; 在LOG窗口顯示錯誤信息,說明由ABORT語句的RETURN選項(xiàng)終程序執(zhí)行; 不執(zhí)行任何相繼的語句或檢查句法; 用一個條件碼指示有錯誤地控制返回到主機(jī)系統(tǒng)。 顯示管理方式和

28、交互行方式下: 立即停止處理并返回到主機(jī)系統(tǒng)。,例7.12 顯示管理方式下使用stop語句與abort的區(qū)別。使用stop語句時,LOG窗口不顯示錯誤信息,當(dāng)新創(chuàng)建數(shù)據(jù)集和已存在的SAS數(shù)據(jù)集同名時,能覆蓋已存在的數(shù)據(jù)集。data a;set resdat.lstkinfo;if _n_=5 then stop;run;Log窗口顯示:,使用abort語句時,LOG窗口顯示錯誤信息,當(dāng)新創(chuàng)建數(shù)據(jù)集和已存在的SAS數(shù)據(jù)集

29、同名時,不能覆蓋已存在的數(shù)據(jù)集。data a;set resdat.lstkinfo;if _n_=5 then abort;run;Log窗口顯示:,例7.13 ABORT語句防止輸入無效數(shù)據(jù)時出錯。data b;input ssn pay ;if _error_ then abort;cards;111 100aaa 200444 300;proc print;run;

30、 輸出結(jié)果:,WHERE語句的性質(zhì),WHERE語句: 讀入數(shù)據(jù)集之前選擇觀測。WHERE語句是在執(zhí)行數(shù)據(jù)集連接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前進(jìn)行的操作。使用WHERE語句時,因?yàn)镾AS系統(tǒng)只從輸入數(shù)據(jù)集中讀入滿足條件的觀測,所以這樣的SAS程序更有效。WHERE語句不是可執(zhí)行語句,它起不到IF-THEN語句的作用。能用WHERE語句的地方一定可以用IF語句來代替,反之則不行。不過,

31、一旦WHERE語句有效,就一定要用它,因?yàn)檫@樣的程序效率高。,語句格式WHERE where-expression;僅用于WHERE表達(dá)式的特殊算符,,例7.15 BETWEEN-AND算符和IS MISSING|IS NULL算符例句。 Where hstocd between 600000 and 600899;Where taxes between salary*0.30 and salary*0.50;Where t

32、axes not between salary*0.30 and salary*0.50;Where idnum is missing; /*計(jì)算缺失值數(shù)目 */Where name is null;LIKE算符的兩個特殊模式: 百分號(%)可以替代任意多個字符; 下劃線(_)正好有一個字符與之匹配。進(jìn)行比較時,LIKE算符識別大寫和小寫之間的字符。,例7.16 設(shè)有名字Diana,Diane, Dianna, Dian

33、thus,Dyan. 使用LIKE算符來選擇第一個字符為D的名字時,LIKE算符的不同選擇模式與結(jié)果如下 :Like 'D_an'; /* 選擇Dyan */Like 'D__an_';/* 沒有名子被選上 */Like 'D_an__'; /* Diana, Diane, Dianna, Dyan */Like 'D_an%'; /*

34、上述列表的所有名字 */Not like 'D_an%'; /* 沒有名子被選上 */,SAMEAND算符的形式:WHERE candition-1;[其它SAS語句]WHERE SAME AND condition -2[其它SAS語句]WEHERE SAME AND condition-n;SAS系統(tǒng)選擇除滿足上述定義的條件外,還滿足在SAME-AND算符后列出條件的觀測。,例7.17 使用算符S

35、AME-AND來增加較多的從句到程序中已有的WHERE語句后面,而不需要重新打入原來的從句proc gplot data=ResDat.Idx000001;plot clpr*date=1;where year(date)>1996;where same and year(date)<2000;run;quit;,應(yīng)用舉例,例7.18 選擇數(shù)值變量非0和非缺失的觀測值 Where x;Where x and

36、y; Where x/y;例7.19 選擇字符變量非缺失的觀測 Where c^=' '; where c is not missing;字符變量C不能單獨(dú)地作為邏輯表達(dá)式 例7.20 選擇一定范圍內(nèi)的觀測 Where x between 1 and 5; where 1<=x<=5;,例7.22 不能用WHERE語句的情況 data a;set ResDat.Idx000001;

37、where _n_<100; /*錯誤語句,必須用if */run;data a;set ResDat.Idx000001;if _n_<100;run;例中,不能用WHERE語句控制SAS的自動變量。,OUTPUT語句,OUTPUT語句輸出當(dāng)前的觀測到被創(chuàng)建的數(shù)據(jù)集中。 語句格式OUTPUT ; 選項(xiàng)說明: OUTPUT語句的作用:由一個輸入數(shù)據(jù)行創(chuàng)建多個觀測;由一個輸入數(shù)據(jù)文件創(chuàng)建多個

38、SAS數(shù)據(jù)集;由幾個輸入數(shù)據(jù)行合并為一個觀測。,應(yīng)用舉例,例7.23 由一個輸入數(shù)據(jù)行創(chuàng)建多個觀測 data A;input ID $ score1- score3;drop score1- score3;score=score1; output;score=score2; output;score=score3; output;cards;02126 99 96 9402128 89 90 88;p

39、roc print;run;例中,每一行記錄生成三個觀測。每個新觀測將包括代號ID和一次測驗(yàn)值SCORE.,例7.24 一個DATA步創(chuàng)建多個數(shù)據(jù)集 data A B;set ResDat.lstkinfo;if Stktype=’A’ then output Astk;else if Stktype=’B’ then output bstk;run;例中,一個DATA步創(chuàng)建兩個數(shù)據(jù)集。數(shù)據(jù)集Astk包含變量Stkty

40、pe=’A’’的所有觀測;數(shù)據(jù)集Bstk包含變量Stktype=’B的所有觀測。,例7.26 由幾個記錄組合信息 proc sort data=ResDat.lstkinfo out=lstkinfo;by stktype;data a;set lstkinfo ;by stktype;if first. Stktype then Num=0;Num+1;keep stktype num ;if last.stktyp

41、e then output;run;例中,計(jì)算數(shù)據(jù)集lstkinfo中兩類不同股票的數(shù)目。這樣的方法是不是簡單快捷。這個例子很有用,從這里也認(rèn)識了自動變量:first. stktype 和last. stktype的使用方法。數(shù)據(jù)處理時用這個語句會很省力。,MISSING語句,MISSING語句規(guī)定缺失值的符號。讀入含有缺失值的數(shù)據(jù)源時,必須用MISSING語句,否則可能產(chǎn)生讀入錯誤。 語句格式Missing charct

42、er1…charctern; 其中:charcter規(guī)定代表缺失值的字符。,應(yīng)用舉例,例7.29 規(guī)定缺失值字符 data period_a;missing X I;input Id $4. Foodpr1 Foodpr2 Foodpr3 Coffeem1 Coffeem2;datalines;1001 115 45 65 I 781002 86 27 55 72 861004 93 52 X 76 881015 7

43、3 35 43 112 1081027 101 127 39 76 79;例中,MISSING語句規(guī)定用字符X和I表示缺失值。如果不用MISSING語句,當(dāng)讀入數(shù)值變量的缺失值時(這里為X和I),就要產(chǎn)生錯誤。,Id Foodpr1 Foodpr2Foodpr3 Coffeem1Coffeem210011154565 I 78100286275

44、5 72 8610049352X 76 881015733543 112 108102710112739 76 79,其它語句,本節(jié)介紹語句LIST, CALL, NULL和ERROR.,LIST語句,LIST語句在SAS日志窗口上

45、列出正被加工處理觀測的輸入數(shù)據(jù)行。 LIST語句被執(zhí)行時,在列出的第一行記錄之前,顯示一條指示列數(shù)的標(biāo)尺。語句格式 LIST;,例7.30 用INPUT語句讀入可疑數(shù)據(jù)行時使用LIST語句data a;input x y;if x<0 then list;cards;2 6 4 2-1 2 -4 6;run;,290 data a;291 input x y;292 if x<0

46、then list;293 cards;RULE: ----+----1----+----2----+----3----+----4----+----5----+----6-296 -1 2297 -4 6NOTE: 數(shù)據(jù)集 WORK.A 有 4 個觀測和 2 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實(shí)際時間 0.00 秒

47、 CPU 時間 0.00 秒298 ;299 run;,LOG顯示結(jié)果,CALL語句,CALL語句用于調(diào)用子程序。語句格式:Call routine (parameter-1);選項(xiàng)說明:,例7.32 創(chuàng)建包含DATA信息的宏變量 data a;call symput ('text1', 'march'); /*將march賦給宏變量text1 */call s

48、ymput ('beta', 100); /*將100賦給宏變量beta */run;例7.33 發(fā)布操作系統(tǒng)命令 data _null_;call system('dir *.sas'); /*發(fā)布和操作系統(tǒng)命令dir *.sas */run;,NULL語句,空語句是一個分號(;),用于固定位置。SAS系統(tǒng)用一個分號(;)或四個分號(;;;;)來接受空語句。 一個分號(;)表示

49、CARDS(或DATALINES)語句后數(shù)據(jù)行的結(jié)束。 四個分號(;;;;)表示CARDS4(或DATALINES4)語句后數(shù)據(jù)行的結(jié)束。 雖然空語句沒有執(zhí)行動作,但它是可執(zhí)行語句。,例7.34 空語句表示數(shù)據(jù)行結(jié)束data a;input x y z;if x=. Then goto find;list;find : ;drop x;cards;1 2 5. 1 32 5 8. 3 9;proc prin

50、t;run;在這個DATA步,CARDS語句告訴SAS 系統(tǒng)在這個作業(yè)流中,緊跟著的是數(shù)據(jù)行,當(dāng)SAS遇到空語句(;)時,就知道數(shù)據(jù)行結(jié)束了。上例中的空語句也可以省略,因數(shù)據(jù)行后面第一個語句(PROC PRINT;)中包含一個分號。,輸出窗口顯示結(jié)果Obs y z1 2 52 1 33 5 84 3 9,ERROR語句,ERROR語句置自動變量_err

51、or_為1,并有選擇地輸出用戶規(guī)定的一段信息到SAS的記錄窗口。語句格式:ERROR ;選項(xiàng)說明:,ERROR語句等價于下面一系列語句: 賦值語句置_ERROR_為1; 一個FILE LOG語句; PUT語句規(guī)定一段信息; 新的一個FILE語句重新設(shè)置前一個FILE 語句的設(shè)置。,例7.35 應(yīng)用舉例 data a;input name $ type $ age ;if type='teen' &

52、amp; age >19 then error 'type and age don"t macth' age=;cards;Wu teen 20Li teen 12Cindy adult 28;,314 data a;315 input name $ type $ age ;316 if type='teen' & age >19 then error &

53、#39;type and age don"t macth' age=;317 cards;type and age don"t macthage=20RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8--318 Wu teen 20name=Wu ty

54、pe=teen age=20 _ERROR_=1 _N_=1NOTE: 數(shù)據(jù)集 WORK.A 有 3 個觀測和 3 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實(shí)際時間 0.01 秒 CPU 時間 0.01 秒321 ;,LOG窗口顯示,data a;input name $ type $ age ;if type='teen' &

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論