SAS編程基礎(chǔ)講義教程_第1頁
SAS編程基礎(chǔ)講義教程_第2頁
SAS編程基礎(chǔ)講義教程_第3頁
SAS編程基礎(chǔ)講義教程_第4頁
SAS編程基礎(chǔ)講義教程_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 SAS編程基礎(chǔ)本章內(nèi)容提要3.1 SAS語法基礎(chǔ)3.2 DATA步3.3 PROC步3.4 SAS語句編程練習(xí)例:Data sasuser.da1;input name$ X1 X2 X3;Y=X1+X2+X3;cards;M 3 1.3 0.5M 2 2.4 0.9F 5 3.2 0.8M 8 4.1 1.1F 7 3.3 0.6;Proc print data= sasuser.da1;run;SAS語言的基本單位是SAS語句,構(gòu)成一個SAS語句由下面兩種方式:一種是由關(guān)鍵詞開始:每個SAS語句一般由一個關(guān)鍵字(如DATA、PROC、INPUT、CARDS、BY)開頭,包含SAS名

2、字、特殊字符、運算符等,以分號結(jié)束;關(guān)鍵詞:用于句首,說明語句的類型和功能;SAS名:SAS語句中出現(xiàn)的SAS名有很多種類,如SAS數(shù)據(jù)集庫名、數(shù)據(jù)集名、變量名等。一種是SAS的表達式:SAS數(shù)據(jù)步程序中的計算用表達式完成,可以對變量作變換和賦值,創(chuàng)建新變量,計算新數(shù)值以及控制條件語句的運行等。表達式是把常量、變量用運算符、函數(shù)、括號連接起來得到一個計算結(jié)果的算式。3.1.1 SAS常數(shù)SAS常數(shù)是SAS系統(tǒng)可以識別的一些固定值。包括數(shù)值常數(shù)、字符常數(shù)和日期時間常數(shù)。1.數(shù)值常數(shù)數(shù)值常數(shù)包括小數(shù)點、負(fù)號及科學(xué)計數(shù)法中的E記號等。例:1, 5, 1.23, 1.2E232.字符常數(shù)字符常數(shù)是由引

3、號括起來的1-200個字符組成,如果字符常數(shù)本身帶有引號,此時應(yīng)再次用引號括起來。 例: name=TOM”S; name=”TOMS”; /*例中,兩語句等價。*/3.1 SAS語法基礎(chǔ)3.日期時間常數(shù) 表示日期(時間)的字符串(用單引號括起來)后跟一個表示日期的字母D/d或表示時間的字母T/t或表示日期時間的字母DT/dt,中間沒有空格。例:1jan2000d; 9:25t; 18jan00:9:27:25dt。3.1.2 SAS變量1.數(shù)值型變量日期、時間等變量存為數(shù)值型,數(shù)值型變量在數(shù)據(jù)集中的存儲一般使用8個字符。2.字符型變量字符型變量缺省的長度為8個字符,其后加符號$,變量名與$之

4、間可以相連也可以有一個空格。SAS中用一個小數(shù)點來表示缺失值。SAS操作符是一些符號,主要有算術(shù)操作符、比較操作符、邏輯操作符。1算術(shù)操作符(執(zhí)行一種算術(shù)運算)+、-、*、/、*、|(字符串并接)2比較操作符(建立量變量之間的關(guān)系)LT、GT、EQ、LE、GE、NE 、 =、 =、 =3邏輯操作符(連接一系列比較式,常與if語句結(jié)合使用) AND、OR、NOT &、 |、 3.1.3 SAS操作符3.1.4 SAS函數(shù)1.SAS函數(shù)定義和表示SAS函數(shù)是SAS系統(tǒng)中編好的子程序,它對若干個變量進行計算后返回一個結(jié)果值。SAS提供了比一般程序設(shè)計語言多的標(biāo)準(zhǔn)函數(shù),有數(shù)學(xué)函數(shù)、字符串函數(shù)、分布函數(shù)

5、、分位數(shù)函數(shù)、隨機數(shù)函數(shù)、日期時間函數(shù)、財政金融函數(shù)等。SAS函數(shù)的形式:函數(shù)名(X1, X2, ):SUM(X1,X2,Y1,Y2)函數(shù)名(OF 變量1 變量N) :SUM(OF X1 X2 Y1 Y2)函數(shù)名(OF 變量1變量N): SUM(OF X1-X20)注意:兩種寫法不能混寫,如SUM(OF X1,X2, X3)和SUM( X1-X3)都是錯誤的。用函數(shù)可以簡化程序不使用SAS函數(shù):total=xl+x2+x3+x4+x5+x6+x7+x8+x9+x10; if totaly then least=total; else least=y;使用SAS函數(shù):leastmin(sum(o

6、f x1-x10),y).函數(shù)分類常用函數(shù)功能數(shù)學(xué)運算函數(shù)ABS( )取絕對值SQRT( )求平方根INT( )取整數(shù)部分EXP( )計數(shù)e的次冪LOG( )求e為底的自然對數(shù)SIN( )計算正弦LAGn( )求給定變量滯后為n的值統(tǒng)計計算函數(shù)MAX( )求最大值MIN( )求最小值MEAN( )求平均值SUM( )求和DIFn( )求給定變量X的第n階差STD( )求標(biāo)準(zhǔn)差PROBNORM( )標(biāo)準(zhǔn)正態(tài)分布函數(shù)一些常見的SAS函數(shù): 日期時間處理函數(shù)DATE( )/TODAY()取當(dāng)日的日期值DAY( )計算某月的那一日HOUR( )計算小時TIME( )取當(dāng)日的時間YEAR( )取年值字符

7、函數(shù)INDEX( )搜尋字符串的位置LEFT( )字符串表達式左對齊SUBSTR( )抽取子字符串TRIM( )移走尾部空格LENGTH( )給出字符變量的長度UPCASE( )轉(zhuǎn)換為大寫財政金融函數(shù)COMPOUND( )計算復(fù)利IRR( )計算內(nèi)部贏利率NPV( )計算凈現(xiàn)值概率函數(shù): PROBNORM(X):標(biāo)準(zhǔn)正態(tài)分布函數(shù),該函數(shù)計算服從標(biāo)準(zhǔn)正態(tài)分布的隨機變量U小于給定X的概率; PROBCHI(x,df,nc):卡方分布函數(shù)。該函數(shù)計算服從自由度為df,非中心參數(shù)為nc的分布的隨機變量小于給定X的概率。如果nc沒有規(guī)定或取為0,那么被計算的就是中心分布。注意,自由度df允許是非整數(shù).

8、PROBF(x, ndf, ddf,nc):F分布的分布函數(shù),該函數(shù)計算服從分子自由度為ndf, 分母自由度為ddf,非中心參數(shù)為nc的F分布的隨機變量小于給定值X的概率。如果nc沒有規(guī)定或取為0,那么被計算的就是中心F分布。注意:自由度允許是非整數(shù)。 PROBT(x,df,nc):該函數(shù)計算服從自由度為df,非中心參數(shù)為nc的T分布的隨機變量小于給定X的概率。如果nc沒有規(guī)定或取為0,那么被計算的就是中心T分布。注意:自由度df允許是非整數(shù)。 PROBBNML(p,n,m):其中0=p=1,0=m,這個函數(shù)給出參數(shù)為p和n的二項分布隨機變量X=240 then n+1;else delete

9、; Cards;82 78 69 90 78 89 79 86 98 76 56 80 72 76 81 69 78 91 92 71 85;proc print;run;3.2.3 OUTPUT語句和DELETE語句 、DROP、KEEP1.OUTPUT語句OUTPUT語句制定SAS系統(tǒng)輸出當(dāng)前的觀測到指定的SAS數(shù)據(jù)集中。其一般格式是:output ;output后的括號中的數(shù)據(jù)集名是可選項。當(dāng)沒有該選項時,SAS系統(tǒng)把當(dāng)前這個觀測輸出到DATA語句命名的所有數(shù)據(jù)集上,并返回到DATA步開始處理此后的語句。當(dāng)有該選項時,SAS系統(tǒng)把當(dāng)前這個觀測輸出到output語句規(guī)定的所有數(shù)據(jù)集上,并返

10、回到DATA步開始接著處理此后的語句。這里數(shù)據(jù)集名可以多于一個,但必須在DATA語句中已被命名。 data class1 class2; input name$ chinese maths english ; total=chinese+maths+english; if total=240 then output class1; else output class2; cards; a 82 78 69 b 90 78 89 c 79 86 98 ; proc print data=class1; title 數(shù)據(jù)集class1 ; proc print data=class2; title

11、 數(shù)據(jù)集class2 ; run; 2.DELETE語句DELETE語句把符合條件的觀測從正在創(chuàng)建的數(shù)據(jù)集中刪去,并返回到DATA步開始處理其他觀測。如: Data class3; input sex$ chinese maths english ; If sex=“m” then delete; cards; m 82 78 69 f 90 78 89 m 79 86 98 ; proc print; run; 3.DROP和KEEP語句可以根據(jù)數(shù)據(jù)集的需要,選用和刪除一些變量,此時可以使用這兩個語句,格式為: DROP VARIABLES; KEEP VARIABLES; DROP=VAR

12、IABLES; KEEP=VARIABLES;由于DROP和KEEP語句的作用正好相反,使用DROP語句時也可以使用KEEP語句。實際中為了書寫方便,在保留變量較少時,常用KEEP語句,而在刪除變量較少時,使用DROP語句。語句選項 注意:在KEEP語句和DROP語句中,不加“=”,而在數(shù)據(jù)集后使用KEEP選項或DROP選項是需加“=”;變量之間用空格隔開;KEEP語句和DROP語句對當(dāng)前正在創(chuàng)建的所有數(shù)據(jù)及均起作用,而在數(shù)據(jù)集后使用KEEP選項或DROP選項僅對在他前面的數(shù)據(jù)集有效,對其他數(shù)據(jù)集不起作用。例:data class4;input name$ chinese maths engl

13、ish ;keep name total;total=chinese+maths+english;cards;a 82 78 69 b 90 78 89 c 79 86 98;與data class4(keep= name total或drop=chinese maths english);input name$ chinese maths english ;total=chinese+maths+english;cards;a 82 78 69 b 90 78 89 c 79 86 98;結(jié)果是一樣的3.2.4 WHERE語句WHERE語句是一個條件語句,它可以從已存在的SAS數(shù)據(jù)集中把滿足

14、條件的觀測輸出到新的SAS數(shù)據(jù)集中,它不能用在由CARDS語句構(gòu)成的DATA步中,也不能從包含原始數(shù)據(jù)的外部文件中選擇記錄。其一般格式是:WHERE where-expression;WHERE語句中的表達式where-expression是由一些列算符合操作數(shù)組成的一個算術(shù)或邏輯表達式,如: where total240; where x; where sex=“m”; where total in (257 263)在執(zhí)行WHERE表達式時,SAS系統(tǒng)首先對第一個觀測計算,根據(jù)其取值決定是否執(zhí)行WHERE后的其它SAS語句:如果表達式計算的結(jié)果為真則執(zhí)行,如果為假,則不執(zhí)行而返回到DATA

15、開始繼續(xù)處理第二個觀測,直到所有觀測都被處理完為止。數(shù)值型變量的名字如“X”可以單獨出現(xiàn)在WHERE表達式中,如果該變量值為0或缺省,則該表達式運算結(jié)果為假,否則為真。例:data class ;input sex$ chinese maths english ;total=chinese+maths+english;cards;m 82 . 69 f 90 0 89 m 79 86 98;data class1;set class;where maths;run;proc print data=class1;run;Between-And算符:該算符選擇變量值落在某個范圍內(nèi)的觀測,范圍的界限

16、可以是常數(shù)或表達式,其一般格式為:WHERE VARIABLE BETWEEN VAULE AND VAULE;如where score between 60 and 100Same And算符:除滿足已選的條件外,還滿足and后的條件的觀測。 例3.9 data class ; input sex$ chinese maths english ; total=chinese+maths+english; cards; m 82 78 69 f 90 78 89 m 79 86 98 M 80 80 80 ; data class1; set class; where total180; wh

17、ere same and total240; run; proc print data=class1; run; SET語句:調(diào)用一個SAS系統(tǒng)已存在的數(shù)據(jù)集利用SET語句可以從一個已經(jīng)存在的SAS數(shù)據(jù)集創(chuàng)建新的數(shù)據(jù)集,一般格式為:DATA new data-set-name;SET old data-set-name ;如: data class1; set class;SAS數(shù)據(jù)步的輸出一般是數(shù)據(jù)集,除此之外,SAS也提供了一個PUT語句,該語句可以將輸出結(jié)果顯示在LOG窗口中。PUT語句在關(guān)鍵字后面列出要輸出的各項,每一項可以是變量名或字符串,各項之間用空格隔開。3.2.5 PUT語句例

18、:data ;X=0.5;Y=sin(x);Put Sine function value of x is y;run;Sine function value of 0.5 is 0.4794255386;在PUT語句中使用“變量名=”來指定輸出項可以顯示帶有變量名的輸出結(jié)果,如可以把上面程序中的PUT語句改為:Put x= y=;X=0.5 y=0.4794255386PUT語句的輸出結(jié)果默認(rèn)情況下被輸出到日志窗口,但在PUT語句之前用FILE語句可以改變PUT語句的輸出目的地。如在PUT語句之前用file print;可以把PUT語句輸出到輸出窗口;在file 語句中指定一個包含文件名的字

19、符串可以把PUT語句的輸出轉(zhuǎn)向到此文件中。3.2.6用在DATA步中的控制語句 控制語句用來改變語句的運行順序或?qū)δ承┐_定的觀測跳過一些語句。1. IF語句(1)條件IF語句條件IF語句含有一個THEN子句,用來執(zhí)行滿足IF條件的那些觀測。如果某個觀測不滿足IF條件,則THEN子句不被執(zhí)行,此時可以使用ELSE語句來執(zhí)行有關(guān)的運算。如果沒有規(guī)定ELSE語句,則SAS系統(tǒng)執(zhí)行緊跟在IF后面的下一個語句。其一般格式是:IF condition THEN statement ; 例3.5:data class1 class2; input name$ chinese maths english ;

20、total=chinese+maths+english; if total=240 then output class1; else output class2; cards; a 82 78 69 b 90 78 89 c 79 86 98 ; proc print data=class1; title 數(shù)據(jù)集class1 ; proc print data=class2; title 數(shù)據(jù)集class2 ; run; 例3.10:data class ; input sex$ chinese maths english ; total=chinese+maths+english; if s

21、ex=m then if total=240 then output; else put total2;run;proc print data=whereab;run; data a ;input x y ;cards;1 15 3 78 5 90;data b;input x z ;cards;1 69 2 89 4 98;data ifab;merge a b;if x2;run;proc print data=whereab1;run; 例3.11:使用WHERE語句的運行結(jié)果:Obs x y z 4 78 98 5 90 .Where 語句先對數(shù)據(jù)使用where語句,然后再進行其他語句

22、的執(zhí)行:x y x z 78 4 985 90使用IF語句的運行結(jié)果:Obs x y z 1 4 90 98if 語句先對數(shù)據(jù)進行合并,再執(zhí)行if 語句: x y z 1 15 69 2 78 89 4 90 982. SELECT語句SELECT語句可提供靈活的多分支語句,SELECT語句有兩種基本的結(jié)構(gòu):(1)SELECT(選擇表達式); WHEN(值列表) 語句; WHEN(值列表) 語句; OTHERWISE 語句; END;其中:“選擇表達式”是一個變量或者表達式;“值列表”是一個與選擇表達式相同取值類型的表達式或具體取值,可以有一項,也可以有多項,多項之間用逗號隔開;執(zhí)行SELEC

23、T結(jié)構(gòu)時,先計算出選擇表達式和值列表中的所有值,然后把選擇表達式值由前向后與值列表中的值相比,如相等則執(zhí)行對應(yīng)的語句,然后退出SELECT結(jié)構(gòu)(不再查看后面的值列表)。如果選擇表達式的值不等于任何值列表中的值則執(zhí)行OTHERWISE對應(yīng)的語句。 例:SELECT(month); WHEN(Feb,Mar,Apr) put春天; WHEN(May,Jun,Jul) put夏天; OTHERWISE put 秋天或冬天;END;(2)SELECT; WHEN(條件) 語句; WHEN(條件) 語句; OTHERWISE 語句; END;這種SELECT語句沒有“選擇表達式”,而是在每一個WHEN語

24、句指定一個條件(邏輯表達式),執(zhí)行第一個滿足條件的WHEN語句后的語句,如果所有的條件都不滿足則執(zhí)行OTHERWISE后的語句。 例:SELECT; WHEN(age7) put嬰幼兒; WHEN(age18) put少年兒童; WHEN(age60) put中青年; OTHERWISE put 老年;END;3. DO語句DO語句是一種循環(huán)語句,即在DO 與END語句之間的這些語句被作為一個單元處理,稱為DO組。常見DO語句有以下四種形式:簡單DO語句、循環(huán)DO語句(計數(shù))、DO WHILE語句(當(dāng)型)、DO UNTIL語句(直到型)。(1) 簡單DO語句 (自身沒有控制變量)簡單DO語句常

25、常用在IF-THEN-ELSE語句里,用來執(zhí)行當(dāng)IF條件成立時的一組語句,在IF條件不成立時,跳出這組語句去執(zhí)行其它SAS語句。其一般格式是: DO; 其它SAS語句; END;例3.12:data class ;input sex$ chinese maths english ;if sex=m then do; total=chinese+maths+english; n+1; end;ave=sum(chinese,maths,english)/3;cards;m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80 f 72 76 81 f 69 78 9

26、1 m 92 71 85;proc print;run;(2)循環(huán)DO語句循環(huán)DO語句是指DO與END之間的語句被重復(fù)執(zhí)行的語句,其一般格式為: DO index-variable = start ; 其它sas語句; end;其中: index-variable:控制(計數(shù))變量,它的值控制著執(zhí)行情況及執(zhí)行次數(shù);Start為控制變量的初始值,當(dāng)同to stop(結(jié)束值)或BY increment(步長)一起使用時,程序先把控制變量賦值為初始值,如果此值小于等于結(jié)束值則執(zhí)行循環(huán)體語句,然后把控制變量加上步長繼續(xù)執(zhí)行循環(huán)體,直到控制變量的值大于結(jié)束值為止。省略步長時默認(rèn)為1。 例: data;

27、do i=1 to 20 by 2; j=i*3; file print; put i j ; end; run;1 1 3 27 5 125 7 343 9 729 11 1331 13 2197 15 3375 17 4913 19 6859 (3) DO WHILE語句該語句規(guī)定當(dāng)WHILE后的表達式(其值是在每次循環(huán)開始前被計算)運行的結(jié)果為真時,重復(fù)地執(zhí)行DO組中的語句。其一般格式為: DO WHILE(expression)。(4) DO UNTIL語句該語句規(guī)定直到UNTIL后的表達式運行的結(jié)果(其值是在每次循環(huán)結(jié)束后被計算)為真時,循環(huán)結(jié)束。其一般格式為:DO UNTIL(ex

28、pression); 例3.14:data class ;input sex$ chinese maths english ; do i=1 to 10 by 2 while (n lt 2); total=chinese+maths+english; n+1; end;ave= (chinese+maths+english)/3;cards;m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80f 72 76 81 f 69 78 91 m 92 71 85;proc print;run; 例3.14:data class ;input sex$ chines

29、e maths english ; do i=1 to 10 by 2 until (n lt 2); total=chinese+maths+english; n+1; end;ave= (chinese+maths+english)/3;cards;m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80f 72 76 81 f 69 78 91 m 92 71 85;proc print;run;3.2.7 SET語句SET語句的用法:調(diào)用一個已存在的SAS數(shù)據(jù)集(復(fù)制數(shù)據(jù)集); 對已存在的SAS數(shù)據(jù)集進行修改;把幾個已存在的SAS數(shù)據(jù)集連接成一個新的數(shù)據(jù)集

30、。 1.調(diào)用一個SAS系統(tǒng)已存在的數(shù)據(jù)集利用SET語句可以調(diào)用一個已經(jīng)存在的SAS數(shù)據(jù)集,以便對數(shù)據(jù)進行其他處理。一般格式為:DATA new data-set-name;SET old data-set-name ;如: data class1; set class; 2.對已存在的SAS數(shù)據(jù)集進行修改利用SET語句可以從一個已經(jīng)存在的SAS數(shù)據(jù)集創(chuàng)建新的數(shù)據(jù)集,一般格式為:DATA new data-set-name;SET old data-set-name ;SET后的選擇項有兩種情況:一是利用KEEP、DROP選項或語句生成部分變量的子集;二是利用WHERE、IF、SELECT語句生

31、成部分觀測子集。Data class1;Set sasuser.class (drop=name sex);run;Data class1;Set sasuser.class;Total=chinese+maths+english;If total=270 then output;run;Data class1 class2;Set sasuser.class;Select(sex); when(男) output class1; when(女) output class2;End;Drop sex;run; 3.數(shù)據(jù)集的縱向合并(1)相同變量順序連接此種方式下,各SAS數(shù)據(jù)集含有相同的變量,

32、SET語句將各數(shù)據(jù)集按照順序把所有觀測連接在一起,即使兩個觀測完全相同也應(yīng)按順序連接起來,新數(shù)據(jù)集的觀測數(shù)目是所有這些數(shù)據(jù)集觀測數(shù)目之和。 data classes; set class1 class2 class3 class4; run;例3.15: data A; input name$ sex$; cards; rose f david m john m mayers f ;data B; input name$ computer physical maths english ; cards; rose 89 65 76 87 david 78 86 78 98 john 90 65

33、76 87 mayers 89(2)不同變量順序連接。連接的幾個數(shù)據(jù)集含有不同的變量,將具有相同變量的觀測連接起來,而沒有變量取值的觀測為缺失值。連接后的變量個數(shù)為所有數(shù)據(jù)集變量數(shù)之和。67 78 80 ;data C; input sex$ total ave; cards; f 317 79.25 m 340 85 m 318 79.5 f 314 78.5 ;data ABC; set A B C; run; proc print; run;(3)按同一變量順序連接。首先按共同變量排序,連接后所形成的新數(shù)據(jù)集,首先讀入第一個數(shù)據(jù)集中第一個BY組中的觀測,然后讀入第二個數(shù)據(jù)集中相同BY組中

34、的觀測,以此類推,知道讀完所有BY組中的觀測。 data A; input name$ sex$; cards; rose f david m john m mayers f ; data B; input name$ computer physical maths english ; cards; rose 89 65 76 87 david 78 86 78 98 john 90 65 76 87 mayers 89 67 78 80 ; data C; input sex$ total ave; cards; f 317 79.25 m 340 85 m 318 79.5 f 314 7

35、8.5 ; data ABC; set A B C; run; proc print; run; data A; set A; run; proc sort; by sex; run; data C; set C; run; proc sort; by sex; run; data AC; set A C; by sex; run; proc print; run;3.2.8MERGE語句(數(shù)據(jù)集的橫向合并)MERGE語句把兩個或兩個以上的SAS數(shù)據(jù)集的變量合并為一個新的SAS數(shù)據(jù)集的變量。其一般格式為: MERGE data-set-name-1 data-set-name-2 data-s

36、et-name-n;1.一對一合并。其合并過程為:按MERGE語句后面數(shù)據(jù)集的排列順序,把第一個數(shù)據(jù)集中的第一個觀測與第二個數(shù)據(jù)集中的第一個觀測,,第N個數(shù)據(jù)集中的第一個觀測合并成新數(shù)據(jù)集中的第一個觀測以此類推,直到所有觀測被合并為止。合并時,以下幾點需要注意:合并后新數(shù)據(jù)集的觀測總數(shù)為參加合并的數(shù)據(jù)集中觀測的最大值。在合并時,如果某數(shù)據(jù)集沒有某一個或幾個觀測,則其對應(yīng)的變量值以缺失值代替。在合并時,如果某幾個數(shù)據(jù)集有共同變量,則合并后的新數(shù)據(jù)集僅含有一個該變量,其對應(yīng)的值為列在MERGE語句最后一個含有該變量的數(shù)據(jù)集中的該變量觀測值。 data A; input name$ sex$; ca

37、rds; rose f david m john m mayers f ; data B; input name$ computer physical maths english ;cards; rose 89 65 76 87 david 78 86 78 98 john 90 65 76 87 mayers 89 67 78 80 ; data C; input sex$ total ave;cards; f 317 79.25 m 340 85 m 318 79.5 f 314 78.5 ; data ABC;MERGE A B C;run; proc print;run;2.匹配合并。

38、每一個數(shù)據(jù)集至少有一個共同變量,且首先按共同變量進行排序,此共同變量稱為匹配變量,通過BY組排序后形成的每一個組稱為BY組,匹配合并實際上就是BY組之間的一對一合并。合并時,以下幾點需要注意:對每一個BY組,新數(shù)據(jù)集中的BY組的觀測個數(shù)是各合并數(shù)據(jù)集中相應(yīng)BY組觀測數(shù)的最大值;對不同的BY組,SAS系統(tǒng)首先處理那些BY值較小的觀測,然后再處理BY值較大的觀測;在同一BY組中,按MERGE語句后面數(shù)據(jù)集的排列順序,把各數(shù)據(jù)集對應(yīng)BY組的第一個觀測進行合并,形成新數(shù)據(jù)集中的第一個觀測,以此類推沒直到所有觀測被合并為止。如果某一數(shù)據(jù)集在某一BY組中沒有觀測,則按缺省值處理。 例3.16: data

39、A; input name$ sex$;cards; benjim m rose f david m john m mayers f mayers m ; proc sort;by name;run; data B; input name$ comp phys mat eng;cards; rose 89 65 76 87 david 78 86 78 98 david 87 69 77 90 john 90 65 76 87 mayers 89 67 78 80 star 66 81 75 94 ; proc sort;by name;run; data AB; merge A B;by n

40、ame; run; proc print; run;排序的結(jié)果 NAME COMP PHYS MAT ENG david 78 86 78 98 david 87 69 77 90 john 90 65 76 87 mayers 89 67 78 80 rose 89 65 76 87 star 66 81 75 94 NAME SEX benjim m david m john m mayers f mayers m rose f內(nèi)容回顧DATA步PROC步DATA score;input name$ sex$ math chinese english;total=chinese+maths

41、+english;cards;王華 F 92 98 86 金一 M 89 96 93趙磊 M 86 90 88 .;PROC print dada=score;run;DATA步PROC步從原始數(shù)據(jù)創(chuàng)建SAS數(shù)據(jù)集:DATA、INPUT、CARDS、“;”;定義變量屬性:LABEL、FORMAT;調(diào)用已有的數(shù)據(jù)集:SET;選擇一部分觀測創(chuàng)建新的SAS數(shù)據(jù)集:IF OUTPUT、 IFDELETE、WHERE;選擇一部分變量創(chuàng)建新的SAS數(shù)據(jù)集:KEEP、DROP;控制語句:IFTHEN、SELECT、DO;數(shù)據(jù)集的縱向合并:SET;數(shù)據(jù)集的橫向合并:MERGE;賦值語句與累加語句:表達式。 P

42、ROC步是用PROC開始的SAS語句,是SAS系統(tǒng)進行處理和分析數(shù)據(jù)的語句。 PROC步的一般格式為: PROC proc-name ; 過程語句 ; 過程語句 ; RUN; 3.3 PROC步3.3.1 SAS過程步中的常用語句1.PROC語句該語句指定要進行的分析方法。其一般格式為:PROC proc-name ;其中: proc-name 表示用戶要調(diào)用的SAS過程名:對數(shù)據(jù)集做某種變換的過程名,如SORT過程等;所要進行的統(tǒng)計分析方法,如MEANS過程、REG過程等。 options規(guī)定此過程的一個或幾個選項,多個選項用空格隔開。例:Proc means data=myclass.sc

43、ore18 maxdec=3 sum mean range;表示系統(tǒng)調(diào)用均值過程,并計算數(shù)據(jù)集score18中各數(shù)值變量的和、均值和極差,并保留3位有效小數(shù)。2. 其它過程語句在PROC語句之后、結(jié)束語句之前可以有若干個可選的過程語句,用來對PROC語句進行具體設(shè)置,主要有: VAR語句:指定分析變量; WHERE語句:指定待分析的觀測子集; BY語句和CLASS語句:指定分組變量; ID語句:指定標(biāo)識變量; WEIGHT語句和FREQ語句:指定權(quán)重變量和頻數(shù)變量; MODEL語句:指定模型形式; LABEL語句和FORMAT語句:指定變量標(biāo)簽和輸出格式; OUTPUT語句:指定輸出結(jié)果存放的

44、數(shù)據(jù)集及輸出結(jié)果形式。(1) VAR語句該語句用來指定分析變量,在VAR后面給出變量列表,各變量名之間用空格隔開。其一般格式為:VAR variable-name-1 variable-name-n ;例:Var weight height; Var x1-x5 y;(2) WHERE語句該語句可以選擇數(shù)據(jù)集的一個觀測子集來進行分析。一般格式為: WHERE expression;例:where math=60 and chinese=60;(3) BY語句和CLASS語句BY語句用來指定一個或幾個分組變量,根據(jù)這些分組變量值的不同將觀測分組,然后對每一組觀測分別進行本過程進行的分析。!SAS

45、系統(tǒng)要求首先應(yīng)按分組變量進行排序。 其一般格式為:BY variable-name-1 variable-name-n;例:假定數(shù)據(jù)集myclass.score18已按變量sex排序,則程序 Proc print data= myclass.score18;by sex;run; 將產(chǎn)生男、女生分開輸出的兩個數(shù)據(jù)集列表。Class語句同樣表示按指定的變量進行分類。與BY語句不同,使用CLASS語句進行分類分析,分類變量不需要事先進行排序。其一般格式為:CLASS variable-name-1 variable-name-n ;當(dāng)BY語句和CLASS語句同時使用時,系統(tǒng)首先按BY變量進行分組,

46、然后再在每一組中按CLASS變量進行分組。BY語句和CLASS語句輸出結(jié)果有差異。例:Proc print data= myclass.score18;class sex;run;(4) ID語句該語句表示用指定的變量來標(biāo)識觀測。在輸出窗口中,系統(tǒng)默認(rèn)用觀測的序號來區(qū)分觀測,當(dāng)使用ID語句時,輸出的觀測用ID變量的值來識別,而觀測的序號則不輸出。!ID變量值與觀測應(yīng)一一對應(yīng)。其一般格式為:ID variable-name;(5) WEIGHT語句和FREQ語句WEIGHT語句用來指定權(quán)數(shù)變量,可以用權(quán)數(shù)變量對其它變量進行加權(quán),通常用在每個觀測的重要性不同的情形下。該變量值應(yīng)大于0,小于0或缺省

47、時,則取值為0。其一般格式為:WEIGHT variable-name;FREQ語句用來指定各觀測出現(xiàn)的頻數(shù)或次數(shù)。若變量的值1或缺省,相應(yīng)的觀測不參加計算統(tǒng)計量;若取值不是正整數(shù),則取整數(shù)部分。其一般格式為:FREQ variable-name;WEIGHT語句與FREQ語句之間的區(qū)別:兩者表示的觀測次數(shù)不同;兩者計算結(jié)果可能不同。(6) MODEL語句該語句在統(tǒng)計建模過程中指定模型的形式,等號左邊的變量為因變量,等號右邊的變量為自變量。其一般格式為:MODEL dependent-variables-name=independent-variables-name ;例:model y=x1

48、-x5; y1 y2=x1 x2 x3 x4 x5;(7) LABEL語句和FORMATLABEL語句為變量指定一個臨時標(biāo)簽,F(xiàn)ORMAT語句為變量輸出規(guī)定一個輸出格式。過程步中規(guī)定標(biāo)簽和輸出格式只用于此過程的本次運行,而數(shù)據(jù)步中的標(biāo)簽和輸出格式是附屬于數(shù)據(jù)集本身的,是永久的。 proc print data=myclass.score18 label; id name; var math chinese; label name=姓名 math=數(shù)學(xué)成績 chinese=語文成績; format math 5.1 chinese 5.1; run;(8) OUTPUT語句該語句用來指定輸出結(jié)果

49、存放的數(shù)據(jù)集名以及輸出內(nèi)容在新數(shù)據(jù)集中的名稱。其一般格式為: OUTPUT out=data-set-name keywords= variable-name;其中:“out=”給出輸出結(jié)果數(shù)據(jù)集的名字;“keyword=variable-name” 指定輸出哪些結(jié)果及其在輸出數(shù)據(jù)集中的名字。 proc means data=myclass.score18; var math; output out=result n=n mean=meanmath var=varmath; run; proc print data=result; run;3.3.2. 幾個常用的SAS過程1. SORT(排序

50、)過程SORT過程將SAS數(shù)據(jù)集按一個或幾個變量的次序進行排序。其一般格式為: PROC SORT ; BY variable-1 variable-n;其中,指定進行排序的數(shù)據(jù)集和輸出的數(shù)據(jù)集的名字:DATA=data-set-name;OUT=data-set-name。BY語句指定排序變量:可同時指定多個排序變量;關(guān)鍵詞descending。例:對數(shù)據(jù)集myclass.score18中的數(shù)據(jù),先按性別升序排序,再按級降序排序。Proc sort data=myclass.score18 out=paixu;By sex descending grade;Run;Proc print;Ru

51、n;是否可替換為class?2. PRINT(打?。┻^程該過程用于輸出SAS數(shù)據(jù)集中的內(nèi)容,以便于檢查數(shù)據(jù)輸入是否正確。其一般格式為: PROC PRINT ; VAR語句; WHERE語句; ID語句; LABEL語句和FORMAT語句; BY語句/CLASS語句; PAGEBY語句; SUM語句 ; TITLE語句和FOOTNOTE語句; (1) PROC PRINT ;該語句是PRINT過程唯一必需的,options選項有:DATA=data-set-name:指定所要打印的數(shù)據(jù)集,如省略則打印最新生成的SAS數(shù)據(jù)集;N:要求在輸出這個數(shù)據(jù)集的數(shù)據(jù)列表之后同時輸出觀測的個數(shù)。如果使用BY

52、語句,在每個BY組的數(shù)據(jù)輸出之后同時輸出該BY組的觀測個數(shù);NOOBS:不輸出觀測數(shù)據(jù)的序號。 (2) VAR語句:指定輸出列表中的變量及其順序;(3) WHERE語句:只輸出滿足條件的觀測;(3) ID語句:指定輸出列表中的標(biāo)識變量;(4) LABEL語句和FORMAT語句:指定輸出變量的標(biāo)簽和格式;(5) BY語句/CLASS語句:指定分類變量,打印輸出時按分類變量的取值不同分組顯示。proc sort data=myclass.score18;by sex;run;proc print n noobs ; by sex;run; (6) PAGEBY語句:PAGEBY variable;

53、該語句指定分頁變量,打印輸出時如果分頁變量的取值發(fā)生變化則在新的一頁上輸出。!使用pageby變量必須同時使用sort過程,并且pageby變量與sort過程中的by變量和print過程中的by變量一致。data sample;input x y z ;Cards;1 1 1 1 2 3 1 7 8 9 5 4 3 4 2 4 5 5 6 6 7 1 4 3 5 6 2; proc sort; by x; run;proc print; by x; pageby x; run; (7) SUM語句:SUM variables; 該語句用來指定一個或多個求和變量。當(dāng)同時使用BY語句時,求和過程同

54、時計算每組合計和總和。data sample;input x y z ;Cards;1 1 1 1 2 3 1 7 8 9 5 4 3 4 2 4 5 5 6 6 7 1 4 3 5 6 2;proc sort; by x; run;proc print; by x; sum y z; run; (8) TITLE語句和FOOTNOTE語句:TITLE 標(biāo)題內(nèi)容或FOOTNOTE 腳注內(nèi)容 該語句用來指定輸出結(jié)果的標(biāo)題和腳注,它們均為全程語句:可以用在DATA步和PROC步內(nèi),也可以單獨使用;具有持續(xù)性,用沒有內(nèi)容的空title/footnote語句取消指定的標(biāo)題或腳注;proc print

55、data=myclass.score18;title 10級1班學(xué)生期末成績表;footnote 2012年3月29日;run;(9) 對輸出結(jié)果的管理 RESULT(結(jié)果管理窗口):可調(diào)用“view-result”打開;HTML格式輸出:調(diào)用“tools-opitions-preferences”菜單。3.TRANSPOSE(轉(zhuǎn)置)過程TRANSPOSE過程把原SAS數(shù)據(jù)集行列互換,轉(zhuǎn)置為一個新的SAS數(shù)據(jù)集。其一般格式為: PROC TRANSPOSE ; VAR 語句; ID 語句; BY語句; COPY 語句; PROC語句中的內(nèi)容:DATA=data-set-name;OUT=dat

56、a-set-name;PREFIX=name;NAME=name。 VAR語句指定轉(zhuǎn)置變量。 ID語句指定輸入數(shù)據(jù)集中的一個變量為輸出數(shù)據(jù)集中觀測的標(biāo)識變量。 BY語句指定轉(zhuǎn)置的分組變量,分組變量取不同值的數(shù)據(jù)作為一組進行轉(zhuǎn)置,但BY 變量本身并不參加轉(zhuǎn)置。COPY語句中列出的所有變量直接輸出,不被轉(zhuǎn)置。 Data A;Input name$20. state$ goods$ employ sale profit;cards;Thomson France Electron 100 11917 2441Farmland Industries U.S. Food 11 4723 3255Chrys

57、ler U.S. Mobiles 128 43600 2551Volkswagen Germany Mobiles 252 46312 1232Nissan Motor Japan Mobiles 143 53760 805Borden U.S. Food 39 6700 6310Mazda Motor Japan Mobiles 33 20279 4541Westinghouse U.S. Electron 102 11564 3260Amerada Hess U.S. Oil 10 5852 2680Peugeot France Mobiles 144 25670 258;Proc sor

58、t out=sortA; by state; run;Proc transpose out=transA;Var state goods employ sale profit;Id name;By state; run;Proc print ;Run;4. MEANS(均值)過程 MEANS過程用于計算變量的基本描述統(tǒng)計量,可對均值進行假設(shè)檢驗,也可建立包含若干統(tǒng)計量的SAS數(shù)據(jù)集。其一般格式為: PROC MEANS ; VAR語句; BY語句/CLASS語句; FREQ語句/ WEIGHT語句; ID語句; OUTPUT語句;PROC MEANS語句 PROC MEANS ; Option

59、s包括的內(nèi)容:DATA =data-set-name; NOPRINT或PRINT;MAXDEC=number;ALPHA=VALUE;數(shù)據(jù)分布的特征集中趨勢 (位置)偏態(tài)和峰態(tài)(形狀)離中趨勢 (分散程度) statistic-keywords包括的描述統(tǒng)計量: N:觀測數(shù); NMISS:缺失觀測數(shù); SUM:變量值和; USS:未修正平方和;CSS:修正平方和;SUMWGT:變量值加權(quán)和; MEAN:均值; STD:標(biāo)準(zhǔn)差; MIN:最小值; MAX:最大值; RANGE:全距; VAR:方差; CV:變異系數(shù); SKEWNESS:偏態(tài)系數(shù); KURTOSIS:峰度系數(shù); T:t統(tǒng)計量值;

60、 PRT:P值; CLM:均值的置信區(qū)間,其中LCLM為置信下限、UCLM為置信上限。集中趨勢分布形態(tài)離中趨勢T檢驗例:為了了解某地區(qū)居民家庭收入狀況,現(xiàn)從這一地區(qū)家庭中隨機抽查了100戶居民,調(diào)查其家庭人均收入,調(diào)查結(jié)果如下(單位:百元):271 396 287 399 466 269 295 330 425 324 228 113 226 176 320 230 404 487 127 74 234 523 164 336 343 330 436 141 388 293 464 200 392 265 403 259 426 262 221 355 324 374 347 261 287

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論