第3章-SAS編程基礎(chǔ)_第1頁(yè)
第3章-SAS編程基礎(chǔ)_第2頁(yè)
第3章-SAS編程基礎(chǔ)_第3頁(yè)
第3章-SAS編程基礎(chǔ)_第4頁(yè)
第3章-SAS編程基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩114頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章SAS編程基礎(chǔ)本章內(nèi)容提要3.1SAS語(yǔ)法基礎(chǔ)3.2DATA步3.3PROC步3.4SAS語(yǔ)句編程練習(xí)3.1.1SAS常數(shù)SAS常數(shù)是SAS系統(tǒng)可以識(shí)別的一些固定值。包括數(shù)值常數(shù)、字符常數(shù)。1.數(shù)值常數(shù)數(shù)值常數(shù)包括數(shù)字、小數(shù)點(diǎn)、符號(hào)及科學(xué)計(jì)數(shù)法中的E記號(hào)等。例:1,–5,1.23,1.2E232.字符常數(shù)字符常數(shù)是由引號(hào)括起來(lái)的1-200個(gè)字符組成,如果字符常數(shù)本身帶有引號(hào),此時(shí)應(yīng)再次用引號(hào)括起來(lái)。

例:”TOM”、‘Tom’;

3.1SAS語(yǔ)法基礎(chǔ)3.1.2SAS變量變量名以字母或者下劃線開(kāi)頭,大小寫(xiě)不敏感,最多32個(gè)字符,可以用變量標(biāo)簽(Label)對(duì)變量進(jìn)行說(shuō)明,最多256個(gè)字符。1.數(shù)值型變量日期、時(shí)間等變量存為數(shù)值型,數(shù)值型變量在數(shù)據(jù)集中的存儲(chǔ)一般使用8個(gè)字符。2.字符型變量字符型變量缺省的長(zhǎng)度為8個(gè)字符,其后加符號(hào)$,變量名與$之間可以相連也可以有一個(gè)空格。SAS操作符是一些符號(hào),主要有算術(shù)操作符、比較操作符、邏輯操作符。1.算術(shù)操作符(執(zhí)行一種算術(shù)運(yùn)算)+、-、*、/、**、||(字符串并接)2.比較操作符(建立變量之間的關(guān)系)LT、GT、EQ、LE、GE、NE<、>、=、<=、>=、^=3.邏輯操作符(連接一系列比較式,常與if語(yǔ)句結(jié)合使用)

AND、OR、NOT&、|、^3.1.3SAS操作符SAS表達(dá)式是把常量、變量用運(yùn)算符、函數(shù)、括號(hào)連接起來(lái)得到一個(gè)計(jì)算結(jié)果的算式。可以對(duì)變量作變換和賦值,創(chuàng)建新變量,計(jì)算新數(shù)值以及控制條件語(yǔ)句的運(yùn)行等。例:X+10;X+Y;Height>160;3.1.4SAS表達(dá)式3.1.5SAS函數(shù)1.SAS函數(shù)定義和表示SAS函數(shù)是SAS系統(tǒng)中編好的子程序,它對(duì)若干個(gè)變量進(jìn)行計(jì)算后返回一個(gè)結(jié)果值。SAS提供了比一般程序設(shè)計(jì)語(yǔ)言多的標(biāo)準(zhǔn)函數(shù),有數(shù)學(xué)函數(shù)、字符串函數(shù)、統(tǒng)計(jì)分布函數(shù)、分位數(shù)函數(shù)、隨機(jī)數(shù)函數(shù)、日期時(shí)間函數(shù)、財(cái)政金融函數(shù)等。SAS函數(shù)的形式:函數(shù)名(X1,X2,…):SUM(X1,X2,Y1,Y2)函數(shù)名(OF變量1…變量N)

:SUM(OFX1X2Y1Y2)函數(shù)名(OF變量1-變量N):SUM(OFX1-X20)注意:兩種寫(xiě)法不能混寫(xiě),如SUM(OFX1,X2,X3)和SUM(X1-X3)都是錯(cuò)誤的。用函數(shù)可以簡(jiǎn)化程序不使用SAS函數(shù):total=xl+x2+x3+x4+x5+x6+x7+x8+x9+x10;

iftotal<ythenleast=total;elseleast=y;使用SAS函數(shù):least=min(sum(ofx1-x10),y).函數(shù)分類(lèi)常用函數(shù)功能數(shù)學(xué)運(yùn)算函數(shù)ABS()取絕對(duì)值SQRT()求平方根INT()取整數(shù)部分EXP()求e次冪LOG()求e為底的自然對(duì)數(shù)SIN()計(jì)算正弦LAGn()求給定變量滯后n期的取值樣本統(tǒng)計(jì)函數(shù)MAX()求最大值MIN()求最小值MEAN()求平均值SUM()求和DIFn()求給定變量X的第n階差STD()求標(biāo)準(zhǔn)差KURTOSIS()峰度系數(shù)2、一些常見(jiàn)的SAS函數(shù):

日期時(shí)間處理函數(shù)DATE()/TODAY()取當(dāng)日的日期值DAY()計(jì)算某月的那一日HOUR()計(jì)算小時(shí)TIME()取當(dāng)日的時(shí)間YEAR()取年值字符函數(shù)INDEX()搜尋字符串的位置LEFT()字符串表達(dá)式左對(duì)齊SUBSTR()抽取子字符串TRIM()移走尾部空格LENGTH()給出字符變量的長(zhǎng)度UPCASE()轉(zhuǎn)換為大寫(xiě)財(cái)政金融函數(shù)COMPOUND()計(jì)算復(fù)利IRR()計(jì)算內(nèi)部贏利率NPV()計(jì)算凈現(xiàn)值概率分布函數(shù):

PROBNORM(x):標(biāo)準(zhǔn)正態(tài)分布函數(shù),該函數(shù)計(jì)算服從標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)變量U小于給定x的概率;PROBCHI(x,df,nc):卡方分布函數(shù)。該函數(shù)計(jì)算服從自由度為df,非中心參數(shù)為nc的分布的隨機(jī)變量小于給定x的概率。如果nc沒(méi)有規(guī)定或取為0,那么被計(jì)算的就是中心分布。PROBF(x,ndf,ddf,nc):F分布的分布函數(shù),該函數(shù)計(jì)算服從分子自由度為ndf,分母自由度為ddf,非中心參數(shù)為nc的F分布的隨機(jī)變量小于給定值x的概率。如果nc沒(méi)有規(guī)定或取為0,那么被計(jì)算的就是中心F分布。PROBT(x,df,nc):該函數(shù)計(jì)算服從自由度為df,非中心參數(shù)為nc的T分布的隨機(jī)變量。如果nc沒(méi)有規(guī)定或取為0,那么被計(jì)算的就是中心T分布。PROBBNML(p,n,x):此函數(shù)給出參數(shù)為p和n的二項(xiàng)分布隨機(jī)變量小于給定x的概率。隨機(jī)數(shù)函數(shù)是進(jìn)行隨機(jī)模擬的基礎(chǔ),SAS系統(tǒng)提供11種隨機(jī)數(shù)函數(shù)分別是:均勻分布隨機(jī)數(shù):UNIFORM(seed),seed必須是常數(shù)0、5位、6位或者7位的奇數(shù);RANUNI(seed),seed為任意常數(shù);正態(tài)分布隨機(jī)數(shù):NORMAL(seed)、RANNOR(seed);指數(shù)分布隨機(jī)數(shù):RANEXP(seed);伽馬分布隨機(jī)數(shù):RANGAM(seed);二項(xiàng)分布隨機(jī)數(shù):RANBIN(seed);泊松分布隨機(jī)數(shù):RANPOI(seed);隨機(jī)數(shù)函數(shù)例:用函數(shù)NORMAL產(chǎn)生正態(tài)分布隨機(jī)數(shù)。dataRV;doi=1to1000;a=normal(0);output;

end;procprintdata=rv;run;用函數(shù)RANNOR產(chǎn)生正態(tài)分布隨機(jī)數(shù)。dataRV;mu=10;sigma=3;doi=1

to

1000;Normal1=mu+sigma*rannor(0);/*均值為mu,標(biāo)準(zhǔn)差為sigma*/output;end;dropmusigma;run;3.1.6SAS語(yǔ)句SAS語(yǔ)言的基本單位是SAS語(yǔ)句,一般由關(guān)鍵字、SAS名、特殊字符和運(yùn)算符組成的字符串,并以分號(hào)結(jié)尾;SAS語(yǔ)句分為兩大類(lèi):DATA步和PROC步,每一步都是一段相對(duì)完整的可以單獨(dú)運(yùn)行的程序。數(shù)據(jù)步(DATA)以DATA關(guān)鍵詞開(kāi)頭,其主要作用是建立和整理SAS數(shù)據(jù)集以及自編程計(jì)算;該程序步設(shè)計(jì)非常靈活,可以根據(jù)要求設(shè)計(jì)不同的語(yǔ)句。過(guò)程步(PROC)以PROC關(guān)鍵詞開(kāi)頭,面向已有的SAS數(shù)據(jù)集,調(diào)用SAS已編好的處理過(guò)程對(duì)數(shù)據(jù)進(jìn)行處理。各種統(tǒng)計(jì)分析方法在SAS中大都以“過(guò)程”的形式存放在SAS過(guò)程庫(kù)中,當(dāng)我們需要進(jìn)行某種統(tǒng)計(jì)分析時(shí),只需用PROC步去調(diào)用相應(yīng)的過(guò)程,即可得到所需要的分析結(jié)果,如進(jìn)行基本統(tǒng)計(jì)分析、回歸、畫(huà)圖、排序、打印等。例:Data

sasuser.da1;input

name$X1X2X3;Y=X1+X2+X3;cards;M31.30.5M22.40.9F53.20.8M84.11.1F73.30.6;Procprintdata=sasuser.da1;run;SAS語(yǔ)句的書(shū)寫(xiě)規(guī)則語(yǔ)句可在行的任一列開(kāi)始,以“;”結(jié)束;一個(gè)語(yǔ)句可以分寫(xiě)為多行,多個(gè)語(yǔ)句可以寫(xiě)在同一行;語(yǔ)句中各項(xiàng)之間至少用一個(gè)空格隔開(kāi);不區(qū)分大小寫(xiě)。應(yīng)遵守的書(shū)寫(xiě)規(guī)則(比較規(guī)范的書(shū)寫(xiě)有助于閱讀和檢查,還可以減少書(shū)寫(xiě)錯(cuò)誤)

:每條語(yǔ)句都要另起行;不同程序步間留空行。3.2.1利用DATA步從原始數(shù)據(jù)創(chuàng)建SAS數(shù)據(jù)集一個(gè)DATA步的基本語(yǔ)句有:

DATA語(yǔ)句:表示創(chuàng)建SAS數(shù)據(jù)集;

INPUT語(yǔ)句:對(duì)數(shù)據(jù)集的變量進(jìn)行描述;

CARDS語(yǔ)句:表示數(shù)據(jù)行的開(kāi)始;;語(yǔ)句:表示數(shù)據(jù)行的結(jié)束。3.2DATA步Datawork.ex1;inputname$X1X2X3;Y=X1+X2+X3;cards;M31.30.5M22.40.9F53.20.8M84.11.1F73.30.6;run;創(chuàng)建數(shù)據(jù)集ex1,且保存在邏輯庫(kù)work下指定數(shù)據(jù)集中的變量名,各變量之間用空格分開(kāi)表示數(shù)據(jù)行的開(kāi)始,數(shù)據(jù)行中不能有“;”表示數(shù)據(jù)行的結(jié)束如果要在一行中輸入幾個(gè)觀測(cè)的數(shù)據(jù),需要加“@@”符號(hào)1.DATA語(yǔ)句:

表示DATA步的開(kāi)始,并給出你要產(chǎn)生的SAS數(shù)據(jù)集的名字。若想保存你的數(shù)據(jù)為永久性數(shù)據(jù)集,必須使用雙水平名字,如sasuser.ex1;若不想保存你的數(shù)據(jù)為永久性數(shù)據(jù)集,你可以輸入Work.data-set-name(數(shù)據(jù)集名)或直接輸入數(shù)據(jù)集名。根據(jù)需要,還可以在DATA后面同時(shí)定義多個(gè)數(shù)據(jù)集的名字,以形成觀測(cè)或變量的子集。見(jiàn)P312.INPUT語(yǔ)句:INPUT語(yǔ)句用于描述輸入的變量和格式,對(duì)每個(gè)變量給出名字、類(lèi)型和格式,如果變量為字符型,在變量名后加$,變量之間用空格隔開(kāi)。3.CARDS語(yǔ)句:數(shù)據(jù)行寫(xiě)在CARDS語(yǔ)句與只有一個(gè)頂頭的分號(hào)“;”行之間。數(shù)據(jù)輸入的格式有自由式、列格式、有格式和命名式四種。(1)自由式:只需將變量名簡(jiǎn)單列在INPUT后,輸入的數(shù)據(jù)以空格隔開(kāi)。自由式使用簡(jiǎn)單,輸入數(shù)據(jù)時(shí)不用上下對(duì)齊,不需要知道每個(gè)變量的列數(shù)只需知道它的次序。例:dataoranges;inputvariety$flavortexturelooks;

cards;navel986temple777valencia899mandarin578;Run;(2)列格式:在INPUT語(yǔ)句變量名后緊跟著變量在數(shù)據(jù)行中所占據(jù)的列起始位置和結(jié)束位置,如Inputname$1-10X112-15;變量在讀取數(shù)據(jù)時(shí)把前10個(gè)列字節(jié)作為變量name的值,把第12列到第15列的字節(jié)作為變量X1的值,以此類(lèi)推。列格式輸入數(shù)據(jù)的特征:數(shù)據(jù)行各項(xiàng)上下對(duì)齊或各項(xiàng)之間可以沒(méi)有任何分隔,連續(xù)寫(xiě)在一起;數(shù)據(jù)長(zhǎng)度可以超過(guò)8個(gè)字符,中間可以有空格;可以只輸入數(shù)據(jù)行中某些項(xiàng)而忽略其他項(xiàng)。Datascore;inputname$1-10sex$11-13math14-16chinese17-20;cards;李明男9298張紅一女89106王思明男8690;Procprintdada=score;run;Dataa;inputa$1-5b7-9;cards;www3333yyyy333333;Procprintdada=a;run;Dataids;inputyear7-10mon11-12day13-14;cards;110103197512092232110101196902150059;Procprintdada=ids;run;(3)有格式:在INPUT語(yǔ)句變量名指定輸入的格式,同時(shí)指明變量的數(shù)據(jù)類(lèi)型和區(qū)域?qū)挾?。如Inputname$5.x13.1表明變量name是字符型的,且占5個(gè)字節(jié),而變量x1則是數(shù)值型的,占3個(gè)字節(jié)空間,且有一位小數(shù)。此時(shí)輸入的數(shù)據(jù)前5列為變量name的值,而第6列到第8列則為變量x1的值,且必須有一位小數(shù)。即當(dāng)輸入的數(shù)字沒(méi)有占滿6到8列,數(shù)據(jù)集首先讀入小數(shù)位數(shù)字,然后再讀入整數(shù)位數(shù)字。

Dataa;inputa$5.b3.1;cards;www333www3333www33333yyyy33.3333;Procprintdata=a;run;(4)命名式:在INPUT語(yǔ)句變量名之后加上“=”,此種數(shù)據(jù)輸入方式在數(shù)據(jù)行中含有變量的名字,后面跟著“=”和變量值的情況下使用,SAS系統(tǒng)在輸入的數(shù)據(jù)中尋找變量名和等號(hào)。Datada1;inputidname=$15.age=;cards;200012name=marryage=15200015age=16name=john200011age=16name=smithandtom;Procprintdata=da1;run;定義變量屬性:變量的屬性包括:(1)字符型還是數(shù)值型:INPUT語(yǔ)句讀入字符型數(shù)據(jù)時(shí)要在變量后面加$符號(hào);(2)變量標(biāo)簽(LABEL):可以給變量加一個(gè)長(zhǎng)度不超過(guò)40個(gè)字符的標(biāo)簽;(3)變量存儲(chǔ)長(zhǎng)度(LENGTH);(4)變量的輸出格式(FORMAT):指定如何顯示變量值。指定變量屬性的語(yǔ)句格式:ATTRIB變量名屬性屬性為“屬性名=屬性值”,可以為一個(gè)變量同時(shí)指定多個(gè)屬性。Datasasuser.da1;inputname$X1X2X3;ATTRIBnamelabel=“姓名”;Y=X1+X2+X3;cards;M31.30.5M22.40.9F53.20.8M84.11.1F73.30.6;Proc

printdata=sasuser.da1;run;

3.2.2賦值語(yǔ)句和累加語(yǔ)句1.賦值語(yǔ)句一般格式:variable=expression;賦值語(yǔ)句將表達(dá)式計(jì)算的結(jié)果賦給變量(variable)。需要注意的是:表達(dá)式中的變量必須已被賦值,否則作為缺省值處理。例如:X=Y+Z*3;X=SUM(Y,Z);avg=(math+chinese+english)/3;2.累加語(yǔ)句累加語(yǔ)句將表達(dá)式的計(jì)算結(jié)果加到累加變量上作為累加變量新的觀測(cè)值,累加語(yǔ)句常用來(lái)計(jì)數(shù)。一般格式:variable+expression;其中Variable是定義累加變量的名字,它必須是數(shù)值型的,且第一個(gè)觀測(cè)被讀入前它自動(dòng)地被賦值為0,表達(dá)式(expression)可包含SAS操作符、SAS函數(shù),用來(lái)進(jìn)行數(shù)學(xué)運(yùn)算等。例:n+1;例3.3:下列數(shù)據(jù)是2008-2009學(xué)年第2學(xué)期某班部分學(xué)生語(yǔ)文、數(shù)學(xué)和英語(yǔ)考試成績(jī),試?yán)美奂诱Z(yǔ)句對(duì)總分超過(guò)240的學(xué)生進(jìn)行計(jì)數(shù)??荚嚦煽?jī)?nèi)缦?827869907889798698765680727681697891927185根據(jù)題目要求,程序編輯如下:dataclass;inputchinesemathsenglish@@;total=chinese+maths+english;iftotal>=240thenn+1;elsedelete;Cards;827869907889798698765680727681697891927185;procprint;run;3.2.3DROP和KEEP語(yǔ)句可以根據(jù)數(shù)據(jù)集的需要,選用和刪除一些變量,此時(shí)可以使用這兩個(gè)語(yǔ)句,格式為:DROPVARIABLES;KEEPVARIABLES;

DROP=VARIABLES;KEEP=VARIABLES;由于DROP和KEEP語(yǔ)句的作用正好相反,使用DROP語(yǔ)句時(shí)也可以使用KEEP語(yǔ)句。實(shí)際中為了書(shū)寫(xiě)方便,在保留變量較少時(shí),常用KEEP語(yǔ)句,而在刪除變量較少時(shí),使用DROP語(yǔ)句。語(yǔ)句選項(xiàng)

注意:在KEEP語(yǔ)句和DROP語(yǔ)句中,不加“=”,而在數(shù)據(jù)集后使用KEEP選項(xiàng)或DROP選項(xiàng)時(shí)需加“=”;變量之間用空格隔開(kāi);KEEP語(yǔ)句和DROP語(yǔ)句對(duì)當(dāng)前正在創(chuàng)建的所有數(shù)據(jù)集均起作用,而在數(shù)據(jù)集后使用KEEP選項(xiàng)或DROP選項(xiàng)僅對(duì)在他前面的數(shù)據(jù)集有效,對(duì)其他數(shù)據(jù)集不起作用。dataclass4;inputname$chinesemathsenglish@@;keepnametotal;total=chinese+maths+english;cards;a827869b907889c798698;與dataclass4(keep=nametotal或drop=chinesemathsenglish);inputname$chinesemathsenglish@@;total=chinese+maths+english;cards;a827869b907889c798698;結(jié)果是一樣的3.2.4IF語(yǔ)句1.條件IF語(yǔ)句條件IF語(yǔ)句含有一個(gè)THEN子句,用來(lái)執(zhí)行滿足IF條件的那些觀測(cè)。如果某個(gè)觀測(cè)不滿足IF條件,則THEN子句不被執(zhí)行,此時(shí)可以使用ELSE語(yǔ)句來(lái)執(zhí)行有關(guān)的運(yùn)算。如果沒(méi)有規(guī)定ELSE語(yǔ)句,則SAS系統(tǒng)執(zhí)行緊跟在IF后面的下一個(gè)語(yǔ)句。其一般格式是:IFconditionTHENstatement;<ELSEstatement;>

例3.5:dataclass1class2;inputname$chinesemathsenglish@@;total=chinese+maths+english;iftotal>=240then

outputclass1;else

outputclass2;cards;a827869b907889c798698;procprintdata=class1;title'數(shù)據(jù)集class1';procprintdata=class2;title'數(shù)據(jù)集class2';run;

例3.10:dataclass;inputsex$chinesemathsenglish@@;total=chinese+maths+english;

ifsex='m'theniftotal>=240then

output;

else

put'total<240';else

put'sex=f';cards;m827869f907889m798698m765680f727681f697891m927185;procprint;run;IF-THEN-ELSE語(yǔ)句可以嵌入一個(gè)或多個(gè)IF-THEN-ELSE語(yǔ)句:dataclass;inputsex$chinesemathsenglish@@;total=chinese+maths+english;

ifsex='m'theniftotal>=240then

output;

elsedelete;elsedelete;cards;m827869f907889m798698m765680f727681f697891m927185;procprint;run;2.子集IF語(yǔ)句

子集IF語(yǔ)句不包含THEN子句,它僅對(duì)滿足IF條件的那些觀測(cè)進(jìn)行處理。

其一般格式是:IFexpression;如果某觀測(cè)使表達(dá)式的計(jì)算結(jié)果非0或非缺省,則認(rèn)為條件成立,SAS系統(tǒng)把當(dāng)前觀測(cè)讀入到正被創(chuàng)建的SAS數(shù)據(jù)集中,并繼續(xù)執(zhí)行此后的語(yǔ)句;否則,SAS系統(tǒng)返回到DATA步,對(duì)其他觀測(cè)執(zhí)行DATA步,該觀測(cè)不被讀入正被創(chuàng)建的SAS數(shù)據(jù)集中,IF語(yǔ)句后的語(yǔ)句也將不再執(zhí)行。如:Ifplace=“shanghai”;ifsex=“f”;3.2.5OUTPUT語(yǔ)句、DELETE語(yǔ)句與PUT語(yǔ)句

1.OUTPUT語(yǔ)句OUTPUT語(yǔ)句指定SAS系統(tǒng)輸出當(dāng)前的觀測(cè)到指定的SAS數(shù)據(jù)集中。其一般格式是:output<數(shù)據(jù)集名1>…<數(shù)據(jù)集名N>;output后的括號(hào)中的數(shù)據(jù)集名是可選項(xiàng)。當(dāng)沒(méi)有該選項(xiàng)時(shí),SAS系統(tǒng)把當(dāng)前這個(gè)觀測(cè)輸出到DATA語(yǔ)句命名的所有數(shù)據(jù)集上,并返回到DATA步開(kāi)始處理此后的語(yǔ)句。當(dāng)有該選項(xiàng)時(shí),SAS系統(tǒng)把當(dāng)前這個(gè)觀測(cè)輸出到output語(yǔ)句規(guī)定的所有數(shù)據(jù)集上,并返回到DATA步開(kāi)始接著處理此后的語(yǔ)句。這里數(shù)據(jù)集名可以多于一個(gè),但必須在DATA語(yǔ)句中已被命名。2.DELETE語(yǔ)句DELETE語(yǔ)句把符合條件的觀測(cè)從正在創(chuàng)建的數(shù)據(jù)集中刪去,并返回到DATA步開(kāi)始處理其他觀測(cè)。如:Dataclass3;inputsex$chinesemathsenglish@@;Ifsex=“m”thendelete;cards;m827869f907889m798698;procprint;run;SAS數(shù)據(jù)步的輸出一般是數(shù)據(jù)集,除此之外,SAS也提供了一個(gè)PUT語(yǔ)句,該語(yǔ)句可以將輸出結(jié)果顯示在LOG窗口中。PUT語(yǔ)句的輸出結(jié)果默認(rèn)情況下被輸出到日志窗口,但在PUT語(yǔ)句之前用FILE語(yǔ)句可以改變PUT語(yǔ)句的輸出目的地,如在PUT語(yǔ)句之前用’fileprint;’可以把PUT語(yǔ)句輸出到輸出窗口。3.PUT語(yǔ)句練習(xí)1、P43實(shí)驗(yàn)2.1;2、P46習(xí)題2.2、2.3,在編輯器中建立SAS數(shù)據(jù)集;3、P34例2.2;4、P56例3.5;5、P59例3.7;6、P63例3.10.

3.2.6DO語(yǔ)句DO語(yǔ)句是一種循環(huán)語(yǔ)句,即在DO與END語(yǔ)句之間的這些語(yǔ)句被作為一個(gè)單元處理,稱為DO組。常見(jiàn)DO語(yǔ)句有以下四種形式:簡(jiǎn)單DO語(yǔ)句、循環(huán)DO語(yǔ)句(計(jì)數(shù))、DOWHILE語(yǔ)句(當(dāng)型)、DOUNTIL語(yǔ)句(直到型)。(1)簡(jiǎn)單DO語(yǔ)句(自身沒(méi)有控制變量)簡(jiǎn)單DO語(yǔ)句常常用在IF-THEN-ELSE語(yǔ)句里,用來(lái)執(zhí)行當(dāng)IF條件成立時(shí)的一組語(yǔ)句,在IF條件不成立時(shí),跳出這組語(yǔ)句去執(zhí)行其它SAS語(yǔ)句。其一般格式是:DO;其它SAS語(yǔ)句;END;例3.12:dataclass;inputsex$chinesemathsenglish@@;ifsex='m'then

do;

total=chinese+maths+english;n+1;

end;ave=sum(chinese,maths,english)/3;cards;m827869f907889m798698m765680f727681f697891m927185;procprint;run;(2)循環(huán)DO語(yǔ)句循環(huán)DO語(yǔ)句是指DO與END之間的語(yǔ)句被重復(fù)執(zhí)行的語(yǔ)句,其一般格式為:

DOindex-variable=start<tostop><BYincrement>;其它sas語(yǔ)句;end;其中:index-variable:控制(計(jì)數(shù))變量,它的值控制著執(zhí)行情況及執(zhí)行次數(shù);Start為控制變量的初始值,當(dāng)同tostop(結(jié)束值)或BYincrement(步長(zhǎng))一起使用時(shí),程序先把控制變量賦值為初始值,如果此值小于等于結(jié)束值則執(zhí)行循環(huán)體語(yǔ)句,然后把控制變量加上步長(zhǎng)繼續(xù)執(zhí)行循環(huán)體,直到控制變量的值大于結(jié)束值為止。省略步長(zhǎng)時(shí)默認(rèn)為1。

例:dataa;doi=1to20by2;j=i**3;output;end;run;

11327512573439729111331132197153375174913196859

例3.13:利用循環(huán)語(yǔ)句和隨機(jī)正態(tài)函數(shù)產(chǎn)生參數(shù)為5的隨機(jī)數(shù)50個(gè):dataa(drop=ijz);doi=1to50by1;y=0;doj=1to5;z=rannor(0);y=y+z*z;end;output;end;run;Procprintdata=a;run;

(3)DOWHILE語(yǔ)句該語(yǔ)句規(guī)定當(dāng)WHILE后的表達(dá)式(其值是在每次循環(huán)開(kāi)始前被計(jì)算)運(yùn)行的結(jié)果為真時(shí),重復(fù)地執(zhí)行DO組中的語(yǔ)句。其一般格式為:

DOWHILE(expression)。(4)DOUNTIL語(yǔ)句該語(yǔ)句規(guī)定直到UNTIL后的表達(dá)式運(yùn)行的結(jié)果(其值是在每次循環(huán)結(jié)束后被計(jì)算)為真時(shí),循環(huán)結(jié)束。其一般格式為:DOUNTIL(expression);

例3.14:dataclass;inputsex$chinesemathsenglish@@;

doi=1to10by2while(nlt2);total=chinese+maths+english;n+1;

end;ave=(chinese+maths+english)/3;cards;m827869f907889m798698m765680f727681f697891m927185;procprint;run;

例3.14:dataclass;inputsex$chinesemathsenglish@@;

doi=1to10by2until(nlt2);total=chinese+maths+english;n+1;

end;ave=(chinese+maths+english)/3;cards;m827869f907889m798698m765680f727681f697891m927185;procprint;run;3.2.7SET語(yǔ)句SET語(yǔ)句的用法:調(diào)用一個(gè)已存在的SAS數(shù)據(jù)集(復(fù)制數(shù)據(jù)集);對(duì)已存在的SAS數(shù)據(jù)集進(jìn)行修改;把幾個(gè)已存在的SAS數(shù)據(jù)集連接成一個(gè)新的數(shù)據(jù)集。

1.調(diào)用一個(gè)SAS系統(tǒng)已存在的數(shù)據(jù)集利用SET語(yǔ)句可以調(diào)用一個(gè)已經(jīng)存在的SAS數(shù)據(jù)集,以便對(duì)數(shù)據(jù)進(jìn)行其他處理。一般格式為:DATAnewdata-set-name;SETolddata-set-name;如:

dataclass1;setclass;

2.對(duì)已存在的SAS數(shù)據(jù)集進(jìn)行修改利用SET語(yǔ)句可以從一個(gè)已經(jīng)存在的SAS數(shù)據(jù)集創(chuàng)建新的數(shù)據(jù)集,一般格式為:DATAnewdata-set-name;SETolddata-set-name<options>;SET后的選擇項(xiàng)有兩種情況:一是利用KEEP、DROP選項(xiàng)或語(yǔ)句生成部分變量的子集;二是利用WHERE、IF語(yǔ)句生成部分觀測(cè)子集。Dataclass1;Setsasuser.class(drop=namesex);run;Dataclass1;Setsasuser.class;Total=chinese+maths+english;Iftotal>=270thenoutput;run;

3.數(shù)據(jù)集的縱向合并(1)相同變量順序連接此種方式下,各SAS數(shù)據(jù)集含有相同的變量,SET語(yǔ)句將各數(shù)據(jù)集按照順序把所有觀測(cè)連接在一起,即使兩個(gè)觀測(cè)完全相同也應(yīng)按順序連接起來(lái),新數(shù)據(jù)集的觀測(cè)數(shù)目是所有這些數(shù)據(jù)集觀測(cè)數(shù)目之和。dataclasses;setclass1class2class3class4;run;例3.15:dataA;inputname$sex$@@;cards;rosefdavidmjohnmmayersf;dataB;inputname$computerphysicalmathsenglish@@;cards;rose89657687david78867898john90657687mayers89(2)不同變量順序連接。連接的幾個(gè)數(shù)據(jù)集含有不同的變量,將具有相同變量的觀測(cè)連接起來(lái),而沒(méi)有變量取值的觀測(cè)為缺失值。連接后的變量個(gè)數(shù)為所有數(shù)據(jù)集變量數(shù)之和。677880;dataC;inputsex$totalave@@;cards;f31779.25m34085m31879.5f31478.5;dataABC;setABC;run;procprint;run;(3)按同一變量順序連接。首先按共同變量排序,連接后所形成的新數(shù)據(jù)集,首先讀入第一個(gè)數(shù)據(jù)集中第一個(gè)BY組中的觀測(cè),然后讀入第二個(gè)數(shù)據(jù)集中相同BY組中的觀測(cè),以此類(lèi)推,直到讀完所有BY組中的觀測(cè)。

dataA;inputname$sex$@@;cards;rosefdavidmjohnmmayersf;dataB;inputname$computerphysicalmathsenglish@@;cards;rose89657687david78867898john90657687mayers89677880;dataC;inputsex$totalave@@;cards;f31779.25m34085m31879.5f31478.5;dataA;setA;run;procsort;bysex;run;dataC;setC;run;procsort;bysex;run;dataAC;setAC;bysex;run;procprint;run;3.2.8MERGE語(yǔ)句(數(shù)據(jù)集的橫向合并)MERGE語(yǔ)句把兩個(gè)或兩個(gè)以上的SAS數(shù)據(jù)集的變量合并為一個(gè)新的SAS數(shù)據(jù)集的變量。其一般格式為:

MERGEdata-set-name-1<(option-1)>data-set-name-2<(option-2)>…<data-set-name-n<(option-n)>>;1.一對(duì)一合并。其合并過(guò)程為:按MERGE語(yǔ)句后面數(shù)據(jù)集的排列順序,把第一個(gè)數(shù)據(jù)集中的第一個(gè)觀測(cè)與第二個(gè)數(shù)據(jù)集中的第一個(gè)觀測(cè),……,第N個(gè)數(shù)據(jù)集中的第一個(gè)觀測(cè)合并成新數(shù)據(jù)集中的第一個(gè)觀測(cè)……以此類(lèi)推,直到所有觀測(cè)被合并為止。合并時(shí),以下幾點(diǎn)需要注意:合并后新數(shù)據(jù)集的觀測(cè)總數(shù)為參加合并的數(shù)據(jù)集中觀測(cè)的最大值。在合并時(shí),如果某數(shù)據(jù)集沒(méi)有某一個(gè)或幾個(gè)觀測(cè),則其對(duì)應(yīng)的變量值以缺失值代替。在合并時(shí),如果某幾個(gè)數(shù)據(jù)集有共同變量,則合并后的新數(shù)據(jù)集僅含有一個(gè)該變量,其對(duì)應(yīng)的值為列在MERGE語(yǔ)句最后一個(gè)含有該變量的數(shù)據(jù)集中的該變量觀測(cè)值。dataA;inputname$sex$@@;cards;rosefdavidmjohnmmayersf;dataB;inputname$computerphysicalmathsenglish@@;cards;rose89657687david78867898john90657687mayers89677880;dataC;inputsex$totalave@@;cards;f31779.25m34085m31879.5f31478.5;dataABC;MERGEABC;run;procprint;run;2.匹配合并。每一個(gè)數(shù)據(jù)集至少有一個(gè)共同變量,且首先按共同變量進(jìn)行排序,此共同變量稱為匹配變量,通過(guò)BY組排序后形成的每一個(gè)組稱為BY組,匹配合并實(shí)際上就是BY組之間的一對(duì)一合并。合并時(shí),以下幾點(diǎn)需要注意:對(duì)每一個(gè)BY組,新數(shù)據(jù)集中的BY組的觀測(cè)個(gè)數(shù)是各合并數(shù)據(jù)集中相應(yīng)BY組觀測(cè)數(shù)的最大值;對(duì)不同的BY組,SAS系統(tǒng)首先處理那些BY值較小的觀測(cè),然后再處理BY值較大的觀測(cè);在同一BY組中,按MERGE語(yǔ)句后面數(shù)據(jù)集的排列順序,把各數(shù)據(jù)集對(duì)應(yīng)BY組的第一個(gè)觀測(cè)進(jìn)行合并,形成新數(shù)據(jù)集中的第一個(gè)觀測(cè),以此類(lèi)推沒(méi)直到所有觀測(cè)被合并為止。如果某一數(shù)據(jù)集在某一BY組中沒(méi)有觀測(cè),則按缺省值處理。如果某一數(shù)據(jù)集含有多個(gè)具有相同BY值的觀測(cè),則合并時(shí)輸出所有這些觀測(cè),其它數(shù)據(jù)集對(duì)應(yīng)的BY組,如果沒(méi)有相應(yīng)的觀測(cè),則取該BY組最后一個(gè)觀測(cè)作為當(dāng)前觀測(cè)與之合并。如果某個(gè)變量同時(shí)出現(xiàn)在幾個(gè)數(shù)據(jù)集中,但是這個(gè)變量又不是匹配變量,則在新的數(shù)據(jù)集中,這個(gè)變量只出現(xiàn)一次,此變量值為最后一個(gè)數(shù)據(jù)集含有該變量的觀測(cè)值。

例3.16:dataA;inputname$sex$@@;cards;benjimmrosefdavidmjohnmmayersfmayersm;procsort;byname;run;dataB;inputname$compphysmateng@@;cards;rose89657687david78867898david87697790john90657687mayers89677880star66817594

;procsort;byname;run;dataAB;mergeAB;byname;run;procprint;run;排序的結(jié)果NAMECOMPPHYSMATENGdavid78867898david87697790john90657687mayers89677880rose89657687star66817594NAMESEXbenjimmdavidmjohnmmayersfmayersmrosef3.2.9WHERE語(yǔ)句WHERE語(yǔ)句是一個(gè)條件語(yǔ)句,它可以從已存在的SAS數(shù)據(jù)集中把滿足條件的觀測(cè)輸出到新的SAS數(shù)據(jù)集中,它不能用在由CARDS語(yǔ)句構(gòu)成的DATA步中,也不能從外部文件中選擇記錄。其一般格式是:WHEREwhere-expression;WHERE語(yǔ)句中的表達(dá)式where-expression是由操作符、數(shù)字、變量組成的算術(shù)或邏輯表達(dá)式,如:wheretotal>240;wherex;wheresex=“m”;wheretotalin(257263)在執(zhí)行WHERE表達(dá)式時(shí),SAS系統(tǒng)首先對(duì)第一個(gè)觀測(cè)計(jì)算,根據(jù)其取值決定是否執(zhí)行WHERE后的其它SAS語(yǔ)句:如果表達(dá)式計(jì)算的結(jié)果為真則執(zhí)行,如果為假,則不執(zhí)行并返回到DATA語(yǔ)句繼續(xù)處理第二個(gè)觀測(cè),直到所有觀測(cè)都被處理完為止。數(shù)值型變量的名字如“X”可以單獨(dú)出現(xiàn)在WHERE表達(dá)式中,如果該變量值為0或缺省,則該表達(dá)式運(yùn)算結(jié)果為假,否則為真。在DATA步中,WHERE語(yǔ)句必須跟在SET、MERGE語(yǔ)句之后,并對(duì)SET、MERGE語(yǔ)句中的所有數(shù)據(jù)集都適用,WHERE表達(dá)式中的變量也必須是這些數(shù)據(jù)集中所具有的。例:dataclass;inputsex$chinesemathsenglish@@;total=chinese+maths+english;cards;m82.69f90089m798698;dataclass1;setclass;wheremaths;run;procprintdata=class1;run;Between-And算符:該算符選擇變量值落在某個(gè)范圍內(nèi)的觀測(cè),范圍的界限可以是常數(shù)或表達(dá)式,其一般格式為:WHEREVARIABLEBETWEENVAULEANDVAULE;如wherescorebetween60and100SameAnd算符:除滿足已選的條件外,還滿足and后的條件的觀測(cè)。

例3.9dataclass;inputsex$chinesemathsenglish@@;total=chinese+maths+english;cards;m827869f907889m798698M808080;

dataclass1;setclass;

wheretotal>180;

wheresameandtotal<240;run;procprintdata=class1;run;子集IF語(yǔ)句和WHERE語(yǔ)句的比較相同點(diǎn):兩者都是條件語(yǔ)句,都需要根據(jù)其后的表達(dá)式計(jì)算結(jié)果來(lái)判斷條件成立與否,在很多情況下兩者輸出的結(jié)果也是一樣的。不同點(diǎn):WHERE語(yǔ)句在觀測(cè)讀入到程序語(yǔ)句之前起作用,而IF語(yǔ)句對(duì)已經(jīng)在程序內(nèi)的觀測(cè)起作用。因此在選擇觀測(cè)時(shí),WHERE語(yǔ)句往往比子集IF語(yǔ)句更有效。WHERE語(yǔ)句僅能處理已存在的SAS數(shù)據(jù)集中的觀測(cè),而子集IF語(yǔ)句不僅能處理已存在的SAS數(shù)據(jù)集中的觀測(cè),也可以處理用INPUT語(yǔ)句產(chǎn)生的觀測(cè)。dataa;inputxy@@;cards;115378590;datab;inputxz@@;cards;169289498;datawhereab;mergeab;wherex>2;run;procprintdata=whereab;run;dataa;inputxy@@;cards;115378590;datab;inputxz@@;cards;169289498;dataifab;mergeab;ifx>2;run;procprintdata=ifab;run;例3.11:使用WHERE語(yǔ)句的運(yùn)行結(jié)果:Obsxyz47898590.Where語(yǔ)句先對(duì)數(shù)據(jù)使用where語(yǔ)句,然后再進(jìn)行其他語(yǔ)句的執(zhí)行:xyxz78498590使用IF語(yǔ)句的運(yùn)行結(jié)果:Obsxyz149098if語(yǔ)句先對(duì)數(shù)據(jù)進(jìn)行合并,再執(zhí)行if語(yǔ)句:xyz115692788949098總結(jié)DATA步PROC步DATAscore;inputname$sex$mathchineseenglish;total=chinese+maths+english;cards;王華F

929886金一M

899693趙磊M869088…….;PROCprintdada=score;run;DATA步PROC步從原始數(shù)據(jù)創(chuàng)建SAS數(shù)據(jù)集:DATA、INPUT、CARDS、“;”;調(diào)用已有的數(shù)據(jù)集:SET;選擇一部分觀測(cè)創(chuàng)建新的SAS數(shù)據(jù)集:IF…OUTPUT、IF…DELETE、WHERE;選擇一部分變量創(chuàng)建新的SAS數(shù)據(jù)集:KEEP、DROP;控制語(yǔ)句:IF…THEN…<ELSE>、DO;數(shù)據(jù)集的縱向合并:SET;數(shù)據(jù)集的橫向合并:MERGE;賦值語(yǔ)句與累加語(yǔ)句:表達(dá)式?!璓ROC步是用PROC開(kāi)始的SAS語(yǔ)句,是SAS系統(tǒng)進(jìn)行處理和分析數(shù)據(jù)的語(yǔ)句。PROC步的一般格式為:

PROCproc-name<options>;

過(guò)程語(yǔ)句<options>;過(guò)程語(yǔ)句<options>;

……RUN;

3.3PROC步3.3.1SAS過(guò)程步中的常用語(yǔ)句1.PROC語(yǔ)句該語(yǔ)句指定要進(jìn)行的分析方法。其一般格式為:PROCproc-name<options>;其中:

proc-name

表示用戶要調(diào)用的SAS過(guò)程名:對(duì)數(shù)據(jù)集做某種變換的過(guò)程名,如SORT過(guò)程等;所要進(jìn)行的統(tǒng)計(jì)分析方法,如MEANS過(guò)程、REG過(guò)程等。

options規(guī)定此過(guò)程的一個(gè)或幾個(gè)選項(xiàng),多個(gè)選項(xiàng)用空格隔開(kāi)。例:Procmeansdata=myclass.score18maxdec=3summeanrange;表示系統(tǒng)調(diào)用均值過(guò)程,并計(jì)算數(shù)據(jù)集score18中各數(shù)值變量的和、均值和極差,并保留3位小數(shù)。2.其它過(guò)程語(yǔ)句在PROC語(yǔ)句之后、結(jié)束語(yǔ)句之前可以有若干個(gè)可選的過(guò)程語(yǔ)句,用來(lái)對(duì)PROC語(yǔ)句進(jìn)行具體設(shè)置,主要有:

VAR語(yǔ)句:指定分析變量;WHERE語(yǔ)句:指定待分析的觀測(cè)子集;BY語(yǔ)句和CLASS語(yǔ)句:指定分組變量;ID語(yǔ)句:指定標(biāo)識(shí)變量;WEIGHT語(yǔ)句和FREQ語(yǔ)句:指定權(quán)重變量和頻數(shù)變量;MODEL語(yǔ)句:指定模型形式;LABEL語(yǔ)句和FORMAT語(yǔ)句:指定變量標(biāo)簽和輸出格式;OUTPUT語(yǔ)句:指定輸出結(jié)果存放的數(shù)據(jù)集及輸出結(jié)果形式。(1)VAR語(yǔ)句該語(yǔ)句用來(lái)指定分析變量,在VAR后面給出變量列表,各變量名之間用空格隔開(kāi)。其一般格式為:VARvariable-name-1…variable-name-n;例:Var

weightheight;

Var

x1-x5y;(2)WHERE語(yǔ)句該語(yǔ)句可以選擇數(shù)據(jù)集的一個(gè)觀測(cè)子集來(lái)進(jìn)行分析。一般格式為:WHEREexpression;例:where

math>=60andchinese>=60;(3)BY語(yǔ)句和CLASS語(yǔ)句BY語(yǔ)句用來(lái)指定一個(gè)或幾個(gè)分組變量,根據(jù)這些分組變量的取值將觀測(cè)分組,然后對(duì)每一組觀測(cè)分別進(jìn)行本過(guò)程進(jìn)行的分析。!SAS系統(tǒng)要求首先應(yīng)按分組變量進(jìn)行排序。

其一般格式為:BYvariable-name-1…variable-name-n;例:假定數(shù)據(jù)集myclass.score18已按變量sex排序,則程序Procprintdata=myclass.score18;by

sex;run;將產(chǎn)生男、女生分開(kāi)輸出的兩個(gè)數(shù)據(jù)集列表。Class語(yǔ)句同樣表示按指定的變量進(jìn)行分組。與BY語(yǔ)句不同,使用CLASS語(yǔ)句進(jìn)行分類(lèi)分析,分類(lèi)變量不需要事先進(jìn)行排序。其一般格式為:CLASSvariable-name-1…variable-name-n;當(dāng)BY語(yǔ)句和CLASS語(yǔ)句同時(shí)使用時(shí),系統(tǒng)首先按BY變量進(jìn)行分組,然后再在每一組中按CLASS變量進(jìn)行分組。例:Procprintdata=myclass.score18;classsex;run;(4)ID語(yǔ)句該語(yǔ)句表示用指定的變量來(lái)標(biāo)識(shí)觀測(cè)。在輸出窗口中,系統(tǒng)默認(rèn)用觀測(cè)的序號(hào)來(lái)區(qū)分觀測(cè),當(dāng)使用ID語(yǔ)句時(shí),輸出的觀測(cè)用ID變量的值來(lái)識(shí)別,而觀測(cè)的序號(hào)則不輸出。!ID變量值與觀測(cè)應(yīng)一一對(duì)應(yīng)。其一般格式為:IDvariable-name;(5)WEIGHT語(yǔ)句和FREQ語(yǔ)句WEIGHT語(yǔ)句用來(lái)指定權(quán)數(shù)變量,可以用權(quán)數(shù)變量對(duì)其它變量進(jìn)行加權(quán),通常用在每個(gè)觀測(cè)的重要性不同的情形下。該變量值應(yīng)大于0,小于0或缺省時(shí)取值為0。其一般格式為:WEIGHTvariable-name;FREQ語(yǔ)句用來(lái)指定各觀測(cè)出現(xiàn)的頻數(shù)或次數(shù)。若變量的值<1或缺省,相應(yīng)的觀測(cè)不參加計(jì)算統(tǒng)計(jì)量;若取值不是正整數(shù),則取整數(shù)部分。其一般格式為:FREQvariable-name;WEIGHT語(yǔ)句與FREQ語(yǔ)句之間的區(qū)別:兩者表示的觀測(cè)次數(shù)不同;兩者的取值范圍不同。(6)MODEL語(yǔ)句該語(yǔ)句在統(tǒng)計(jì)建模過(guò)程中指定模型的形式,等號(hào)左邊的變量為因變量,等號(hào)右邊的變量為自變量。其一般格式為:MODELdependent-variables-name=independent-variables-name<options>;例:modely=x1-x5;y1y2=x1x2x3x4x5;(7)LABEL語(yǔ)句和FORMATLABEL語(yǔ)句為變量指定一個(gè)臨時(shí)標(biāo)簽,F(xiàn)ORMAT語(yǔ)句為變量輸出規(guī)定一個(gè)輸出格式。過(guò)程步中規(guī)定標(biāo)簽和輸出格式只用于此過(guò)程的本次運(yùn)行,而數(shù)據(jù)步中的標(biāo)簽和輸出格式是附屬于數(shù)據(jù)集本身的,是永久的。procprintdata=myclass.score18label;idname;varmathchinese;

label

name=姓名math=數(shù)學(xué)成績(jī)chinese=語(yǔ)文成績(jī);

format

math5.1chinese5.1;run;(8)OUTPUT語(yǔ)句該語(yǔ)句用來(lái)指定輸出結(jié)果存放的數(shù)據(jù)集名以及輸出內(nèi)容在新數(shù)據(jù)集中的名稱。其一般格式為:

OUTPUTout=data-set-namekeywords=variable-name;其中:“out=”給出輸出結(jié)果數(shù)據(jù)集的名字;“keyword=variable-name”指定輸出哪些結(jié)果及其在輸出數(shù)據(jù)集中的名字。procmeansdata=myclass.score18;varmath;

outputout=resultn=nmean=meanmathvar=varmath;run;procprintdata=result;run;3.3.2.幾個(gè)常用的SAS過(guò)程1.SORT(排序)過(guò)程SORT過(guò)程將SAS數(shù)據(jù)集按一個(gè)或幾個(gè)變量的次序進(jìn)行排序。其一般格式為:PROCSORT<options>;BY<descending>variable-1…<descending>variable-n;其中,<options>指定進(jìn)行排序的數(shù)據(jù)集和輸出的數(shù)據(jù)集的名字:DATA=data-set-name;OUT=data-set-name。BY語(yǔ)句指定排序變量:可同時(shí)指定多個(gè)排序變量;關(guān)鍵詞descending。例:對(duì)數(shù)據(jù)集myclass.score18中的數(shù)據(jù),先按性別升序排序,再按級(jí)降序排序。Procsort

data=myclass.score18out=paixu;By

sexdescendinggrade;Run;Procprint;Run;2.PRINT(打?。┻^(guò)程該過(guò)程用于輸出SAS數(shù)據(jù)集中的內(nèi)容,以便于檢查數(shù)據(jù)輸入是否正確。其一般格式為:PROCPRINT<options>;VAR語(yǔ)句;WHERE語(yǔ)句;ID語(yǔ)句;LABEL語(yǔ)句和FORMAT語(yǔ)句;BY語(yǔ)句/CLASS語(yǔ)句;

PAGEBY語(yǔ)句;SUM語(yǔ)句;TITLE語(yǔ)句和FOOTNOTE語(yǔ)句;

(1)PROCPRINT<options>;該語(yǔ)句是PRINT過(guò)程唯一必需的,options選項(xiàng)有:DATA=data-set-name:指定所要打印的數(shù)據(jù)集,如省略則打印最新生成的SAS數(shù)據(jù)集;N:要求在輸出這個(gè)數(shù)據(jù)集的數(shù)據(jù)列表之后同時(shí)輸出觀測(cè)的個(gè)數(shù)。如果使用BY語(yǔ)句,在每個(gè)BY組的數(shù)據(jù)輸出之后同時(shí)輸出該BY組的觀測(cè)個(gè)數(shù);NOOBS:不輸出觀測(cè)數(shù)據(jù)的序號(hào)。

(2)VAR語(yǔ)句:指定輸出列表中的變量及其順序;(3)WHERE語(yǔ)句:只輸出滿足條件的觀測(cè);(3)ID語(yǔ)句:指定輸出列表中的標(biāo)識(shí)變量;(4)LABEL語(yǔ)句和FORMAT語(yǔ)句:指定輸出變量的標(biāo)簽和格式;(5)BY語(yǔ)句/CLASS語(yǔ)句:指定分類(lèi)變量,打印輸出時(shí)按分類(lèi)變量的取值不同分組顯示。procsortdata=myclass.score18;bysex;run;procprintnnoobs;

bysex;run;(6)PAGEBY語(yǔ)句:PAGEBYvariable;該語(yǔ)句指定分頁(yè)變量,打印輸出時(shí)如果分頁(yè)變量的取值發(fā)生變化則在新的一頁(yè)上輸出。!使用pageby變量必須同時(shí)使用sort過(guò)程,并且pageby變量與sort過(guò)程中的by變量和print過(guò)程中的by變量一致。datasample;inputxyz@@;Cards;111123178954342455667143562;

procsort;byx;

run;procprint;byx;pagebyx;run;(7)SUM語(yǔ)句:SUMvariables;

該語(yǔ)句用來(lái)指定一個(gè)或多個(gè)求和變量。當(dāng)同時(shí)使用BY語(yǔ)句時(shí),求和過(guò)程同時(shí)計(jì)算每組合計(jì)和總和。datasample;inputxyz@@;Cards;111123178954342455667143562;procsort;byx;run;procprint;byx;sumyz;run;(8)TITLE語(yǔ)句和FOOTNOTE語(yǔ)句:TITLE’標(biāo)題內(nèi)容’

或FOOTNOTE’腳注內(nèi)容’

該語(yǔ)句用來(lái)指定輸出結(jié)果的標(biāo)題和腳注,它們均為全程語(yǔ)句:可以用在DATA步和PROC步內(nèi),也可以單獨(dú)使用;具有持續(xù)性,用沒(méi)有內(nèi)容的空title/footnote語(yǔ)句取消指定的標(biāo)題或腳注;procprintdata=myclass.score18;title10級(jí)1班學(xué)生期末成績(jī)表;footnote2012年3月29日;run;(9)對(duì)輸出結(jié)果的管理

RESULT(結(jié)果管理窗口):可調(diào)用“view-result”打開(kāi);HTML格式輸出:調(diào)用“tools-opitions-preferences”菜單。3.TRANSPOSE(轉(zhuǎn)置)過(guò)程TRANSPOSE過(guò)程把原SAS數(shù)據(jù)集行列互換,轉(zhuǎn)置為一個(gè)新的SAS數(shù)據(jù)集。其一般格式為:PROCTRANSPOSE<options>;VAR語(yǔ)句;ID語(yǔ)句;BY語(yǔ)句;

COPY語(yǔ)句;

PROC語(yǔ)句中<Options>的內(nèi)容:DATA=data-set-name;OUT=data-set-name;PREFIX=name;NAME=name。VAR語(yǔ)句指定轉(zhuǎn)置變量。

ID語(yǔ)句指定輸入數(shù)據(jù)集中的一個(gè)變量為輸出數(shù)據(jù)集中觀測(cè)的標(biāo)識(shí)變量。BY語(yǔ)句指定轉(zhuǎn)置的分組變量,分組變量取不同值的數(shù)據(jù)作為一組進(jìn)行轉(zhuǎn)置,但BY變量本身并不參加轉(zhuǎn)置。COPY語(yǔ)句中列出的所有變量直接輸出,不被轉(zhuǎn)置。

DataA;Inpu

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論