文庫(kù)發(fā)布:sas應(yīng)用基礎(chǔ)2n_第1頁(yè)
文庫(kù)發(fā)布:sas應(yīng)用基礎(chǔ)2n_第2頁(yè)
文庫(kù)發(fā)布:sas應(yīng)用基礎(chǔ)2n_第3頁(yè)
文庫(kù)發(fā)布:sas應(yīng)用基礎(chǔ)2n_第4頁(yè)
文庫(kù)發(fā)布:sas應(yīng)用基礎(chǔ)2n_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

SAS軟件應(yīng)用基礎(chǔ)之二SAS的數(shù)據(jù)獲取2數(shù)據(jù)獲取

(將實(shí)際數(shù)據(jù)轉(zhuǎn)錄為SAS數(shù)據(jù)文件)SAS可以從以各種形式存儲(chǔ)的數(shù)據(jù)中獲取有用的信息,建立專門格式的SAS數(shù)據(jù)文件。數(shù)據(jù)來源可以是長(zhǎng)度不定的記錄、二進(jìn)制文件、自由格式數(shù)據(jù)、甚至包括殘缺數(shù)據(jù)的文件。通過SAS系統(tǒng)中各種工具以及相應(yīng)方法,可方便地訪問這些數(shù)據(jù),并可轉(zhuǎn)換為SAS數(shù)據(jù)文件。SAS系統(tǒng)只能對(duì)由SAS建立的數(shù)據(jù)文件直接進(jìn)行統(tǒng)計(jì)分析。3

圖形界面交互式錄入數(shù)據(jù) SAS系統(tǒng)有多種圖形界面能交互式的將數(shù)據(jù)錄入為SAS專用的數(shù)據(jù)文件。這里介紹其中幾種:利用VIEWTABLE新建數(shù)據(jù)集利用SASASSIST創(chuàng)建數(shù)據(jù)集利用SASINSIGHT創(chuàng)建數(shù)據(jù)集利用SASANALYST創(chuàng)建數(shù)據(jù)集利用SASLAB創(chuàng)建數(shù)據(jù)集4利用VIEWTABLE錄入數(shù)據(jù)VIEWTABLE是SAS系統(tǒng)中一種通過可視的方式管理數(shù)據(jù)的工具。用VIEWTABLE建立SAS數(shù)據(jù)文件的方法:一.在SAS資源管理器窗口中,打開某數(shù)據(jù)庫(kù),然后在此窗欄內(nèi)單擊鼠標(biāo)右鍵,在菜單中選New按鈕(或單擊SAS主菜單上的File->New…,也可在命令窗口條內(nèi)鍵入SAS命令vt)。二.在隨后出現(xiàn)的窗口、對(duì)話框內(nèi)據(jù)提示選擇。5利用SASASSIST錄入數(shù)據(jù)SASASSIST是SAS系統(tǒng)的一個(gè)重要的模塊.它的作用是使得用戶不需要編程就可以完成一些常用的數(shù)據(jù)管理、統(tǒng)計(jì)分析、輸出圖表。單擊Solution菜單下的ASSIST選項(xiàng),啟動(dòng)SASASSIST。在系統(tǒng)彈出的窗口中,SASASSIST進(jìn)行一些初始設(shè)置;如果不希望在下次使用SASASSIST的時(shí)候仍然出現(xiàn)這個(gè)窗口,可以將Showthiswindowatstartup前面的叉號(hào)取消。不作修改,單擊Continue按鈕,就自動(dòng)彈出了SASASSIST的工作區(qū)域??筛鶕?jù)提示進(jìn)行操作。數(shù)據(jù)輸入時(shí)先按Insert鍵,結(jié)束時(shí)可用end命令!6★用Insight與Analyst錄入數(shù)據(jù)用SAS主菜單上的Solutions->Anayisis->Analyst選項(xiàng)可打開Analyst界面進(jìn)行數(shù)據(jù)錄入和分析。(也可用命令窗條內(nèi)鍵入analyst實(shí)現(xiàn))用SAS主菜單上的Solutions->Anayisis->InteractiveDataAnalysis選項(xiàng)可打開Insight界面進(jìn)行數(shù)據(jù)錄入和分析。(也可用命令窗條內(nèi)鍵入insight實(shí)現(xiàn))7SAS基本概念SAS數(shù)據(jù)集與SAS數(shù)據(jù)庫(kù)變量與觀測(cè)常用統(tǒng)計(jì)量及記號(hào)8SAS數(shù)據(jù)集

(SAS數(shù)據(jù)文件)SAS數(shù)據(jù)集通常是SAS系統(tǒng)操作的對(duì)象,也是數(shù)據(jù)在SAS系統(tǒng)中的存儲(chǔ)形式。SAS數(shù)據(jù)集可以看成是由若干行和若干列組成的表格(矩陣,關(guān)系型數(shù)據(jù)結(jié)構(gòu)),各列可以取不同類型的值。SAS數(shù)據(jù)集是由SAS系統(tǒng)建立的特有的數(shù)據(jù)存儲(chǔ)格式,只能被SAS系統(tǒng)調(diào)用。SAS數(shù)據(jù)集以.sas7bdat為擴(kuò)展名。數(shù)據(jù)集的名字由英文字母、數(shù)字、下劃線組成,第一個(gè)字母必須是字母或下劃線,名字最多只能有8個(gè)字符;另外在命名時(shí)不區(qū)分大小寫。9常見SAS文件的后綴名.sas7bdat——SAS系統(tǒng)數(shù)據(jù)集文件的擴(kuò)展名.sas7bvew——SAS系統(tǒng)數(shù)據(jù)集視圖的擴(kuò)展名.sas7bcat——SAS系統(tǒng)目錄文件的擴(kuò)展名.sas7bndx——SAS系統(tǒng)數(shù)據(jù)集索引的擴(kuò)展名.sas7bitm——SAS系統(tǒng)項(xiàng)目?jī)?chǔ)存文件的擴(kuò)展名10觀測(cè)與變量數(shù)據(jù)集的每一行叫做一個(gè)觀測(cè)(observation)。數(shù)據(jù)集的一列叫做一個(gè)變量(variable)。SAS變量只有兩種基本類型:數(shù)值型(N)和字符型($或C);邏輯、時(shí)間型數(shù)據(jù)都通過數(shù)值型來表示。如將日期折算成與1960.1.1的間隔天數(shù)值存放,0表示FALSE,非零數(shù)表示TURE。SAS數(shù)據(jù)集類似于關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)表,因此,觀測(cè)=記錄、變量=屬性(列)。11日期、時(shí)間型數(shù)據(jù)的存貯為了使日期、時(shí)間型數(shù)據(jù)能參與合理的運(yùn)算(如計(jì)算兩日期的間隔時(shí)間等),應(yīng)該將其保存為數(shù)值型數(shù)據(jù)最為恰當(dāng)。采用正確的輸入方式后,SAS系統(tǒng)在貯存數(shù)據(jù)時(shí),會(huì)自動(dòng)將日期數(shù)據(jù)折算成與1960.1.1的間隔天數(shù);將時(shí)間型數(shù)據(jù)折算成與午夜0時(shí)0分0秒的間隔秒數(shù);將日期時(shí)間型數(shù)據(jù)折算成與1960年1月1日0時(shí)0分0秒的間隔秒數(shù)。12變量的屬性說明Name:輸入變量的名稱,最長(zhǎng)不能超過32個(gè)字符。這項(xiàng)內(nèi)容只在新建表格的時(shí)才可以修改。Label:變量的標(biāo)簽,最長(zhǎng)不能超過256個(gè)字符。在VIEWTABLE中,它代替Name作為這一列的題目。Length:用來規(guī)定變量的數(shù)據(jù)的長(zhǎng)度,默認(rèn)為8字節(jié)。這項(xiàng)內(nèi)容也只在新建表格時(shí)才可修改。Format:修改數(shù)據(jù)的輸出格式。例如我們希望顯示1288.12美元,那么可在這里將格式修改為$10.2,則在表格中這個(gè)數(shù)據(jù)將顯示為$1288.12。Informat:修改數(shù)據(jù)的輸入格式。Type:選擇變量是數(shù)值型(Numeric)還是字符型(Character)的。13SAS數(shù)據(jù)庫(kù)

(Windows的目錄、文件夾)SAS數(shù)據(jù)庫(kù)的概念與通常所講的數(shù)據(jù)庫(kù)的概念有所不同,它也是SAS系統(tǒng)中一個(gè)特有的概念。在SAS系統(tǒng)中使用的各種數(shù)據(jù)文件(包括dbf/db2等外部數(shù)據(jù)文件)可以分類組織起來,冠以不同的邏輯別名—數(shù)據(jù)庫(kù)名。也就是說,數(shù)據(jù)庫(kù)其實(shí)是比數(shù)據(jù)集高一級(jí)的目錄文件夾。在Windows操作系統(tǒng)中,一個(gè)數(shù)據(jù)庫(kù)通常對(duì)應(yīng)為一個(gè)或多個(gè)文件夾中的若干數(shù)據(jù)文件。目的:在各種操作系統(tǒng)下,SAS對(duì)數(shù)據(jù)文件操作的環(huán)境相對(duì)統(tǒng)一,都可通過數(shù)據(jù)庫(kù)方便地訪問數(shù)據(jù)文件。14SAS預(yù)定義的數(shù)據(jù)庫(kù)WORK數(shù)據(jù)庫(kù):

用來存放臨時(shí)數(shù)據(jù)集。SASUSER數(shù)據(jù)庫(kù):

用來存放用戶自己的數(shù)據(jù)集,保存在其中的數(shù)據(jù)集是永久的。SASHELP數(shù)據(jù)庫(kù):

用來存放SAS系統(tǒng)幫助、例子文件,保存在其中的數(shù)據(jù)集也是永久的。15臨時(shí)數(shù)據(jù)集與永久數(shù)據(jù)集按照數(shù)據(jù)集的生命周期可以將其分為臨時(shí)數(shù)據(jù)集和永久數(shù)據(jù)集。臨時(shí)數(shù)據(jù)集就是數(shù)據(jù)集被建立后只在SAS進(jìn)程沒有關(guān)閉的情況下存在,一旦退出SAS進(jìn)程,那么這個(gè)數(shù)據(jù)集也就隨之消失了。存儲(chǔ)在work庫(kù)下的數(shù)據(jù)集都是臨時(shí)數(shù)據(jù)集,其它庫(kù)中的數(shù)據(jù)集都是永久數(shù)據(jù)集。永久數(shù)據(jù)集當(dāng)SAS進(jìn)程結(jié)束的時(shí)候仍然存在,下次啟動(dòng)SAS的時(shí)候(包括重啟計(jì)算機(jī)),仍然可以使用它,除非用delete命令強(qiáng)行將它刪除。16SAS數(shù)據(jù)集的兩水平名SAS數(shù)據(jù)集用兩水平命名(兩級(jí)名)方式進(jìn)行命名。兩水平名中前一部分是數(shù)據(jù)庫(kù)名,后一部分是數(shù)據(jù)集名,中間用點(diǎn)號(hào)連接。

若數(shù)據(jù)庫(kù)名省略,則表示庫(kù)名為WORK。例如:數(shù)據(jù)集test表示W(wǎng)ORK庫(kù)中的臨時(shí)數(shù)據(jù)集test;SASUSER.test表示SASUSER庫(kù)中的數(shù)據(jù)集test。

(Windows下的實(shí)際文件名為test.sas7bdat。)在SAS中訪問數(shù)據(jù)集必須使用這樣的辦法。17用戶自建數(shù)據(jù)庫(kù)用LIBNAME語(yǔ)句可以將SAS數(shù)據(jù)庫(kù)(邏輯的)與一個(gè)實(shí)際的目錄(文件夾)聯(lián)系起來,形成用戶自建的SAS數(shù)據(jù)庫(kù)。LIBNAME語(yǔ)句的一般用法為:

libname

數(shù)據(jù)庫(kù)名[引擎]庫(kù)位置;

libname

數(shù)據(jù)庫(kù)名(庫(kù)位置1庫(kù)位置2…);庫(kù)位置通常是‘目錄的全路徑文件名’表示;引擎為讀寫數(shù)據(jù)的格式說明,如v8,v6,xport等。另外,也可用“創(chuàng)建新的數(shù)據(jù)集”工具圖標(biāo)來實(shí)現(xiàn)SAS數(shù)據(jù)庫(kù)的創(chuàng)建。18建立SAS數(shù)據(jù)庫(kù)的例子希望把F:\MySASFiles\V8\new這個(gè)目錄與一個(gè)名叫l(wèi)ibtest

的數(shù)據(jù)庫(kù)聯(lián)系起來,并且將test數(shù)據(jù)集放置在其中??梢栽诰庉嫶翱谳斎肴缦碌某绦颍簂ibname

libtest'f:\mysasfiles\v8\new';datalibtest.test;inputcodeprice;cards;6003811860026216600252860000910600036;run;19常用統(tǒng)計(jì)量的表示20常用統(tǒng)計(jì)量的表示(續(xù))21分位數(shù)表Max是最大值,Min是最小值。

Med是中位數(shù),反映數(shù)據(jù)的中心位置。Q1是四分之一分位數(shù),Q3是四分之三分位數(shù)。Range是最大值減最小值,Q3-Q1為四分位間距,可以反映數(shù)據(jù)取值分散程度。Mode是眾數(shù),即出現(xiàn)次數(shù)最多的值。22圖形界面批量式錄入關(guān)系數(shù)據(jù)SAS系統(tǒng)提供了將SAS數(shù)據(jù)集與標(biāo)準(zhǔn)格式文件和用戶自定義格式文件之間的互相轉(zhuǎn)換功能。SAS的導(dǎo)入向?qū)Э梢詭椭覀兺瓿蛇@項(xiàng)工作。SAS系統(tǒng)可以轉(zhuǎn)換的標(biāo)準(zhǔn)格式的數(shù)據(jù)文件包括:MicrosoftExcel97or2000 Lotus1spreadsheetMicrosoftExcel5or7Lotus3spreadsheetMicrosoftExcel4spreadsheet Lotus4spreadsheetMicrosoftAccess2000table DelimitedFileMicrosoftAccess97table (分隔的數(shù)據(jù)文件沒有特定擴(kuò)展名)DBaseFile CommaSeparatedValuesTabdelimitedFile(逗號(hào)分隔數(shù)據(jù)文件擴(kuò)展名為csv)(制表符分隔數(shù)據(jù)文件擴(kuò)展名為txt)23標(biāo)準(zhǔn)格式的數(shù)據(jù)文件的轉(zhuǎn)換首先選擇File菜單中的Importdata按鈕,就啟動(dòng)了導(dǎo)入向?qū)?。若文件是?biāo)準(zhǔn)數(shù)據(jù)格式,則選擇Standarddatasource,然后在下拉菜單選具體格式。24編程方式錄入數(shù)據(jù)采用SAS編程方式錄入實(shí)際數(shù)據(jù)是一種靈活而有效的手段。盡管用圖形界面進(jìn)行各種操作已經(jīng)成為Windows時(shí)代的一種主流模式,但在一些較復(fù)雜的、龐大的問題上,還是需要用編程模式才能方便的給予解決。在SAS系統(tǒng)中,我們可以用其兩類基本過程之一的數(shù)據(jù)步過程來完成對(duì)批量數(shù)據(jù)的錄入與管理。25DataStep用于將原始數(shù)據(jù)文件轉(zhuǎn)換成SAS數(shù)據(jù)集并可進(jìn)行多種數(shù)據(jù)變換。DataStep的一般形式:dataSAS-data-set;infile

'filename'option;input變量輸入設(shè)定;其他SAS語(yǔ)句;run;dataSAS-data-set;input變量輸入設(shè)定;其他SAS語(yǔ)句;cards;原始數(shù)據(jù);run;26源數(shù)據(jù)的基本輸入模式在SAS數(shù)據(jù)步中,對(duì)輸入數(shù)據(jù)起核心作用的是input語(yǔ)句;根據(jù)數(shù)據(jù)源的格式,input語(yǔ)句可以采用四種基本輸入模式:按列輸入(Column)格式化輸入(Format)自由列表輸入(List)命名輸入模式(Name)當(dāng)然,對(duì)一些形式較復(fù)雜的源數(shù)據(jù)還可采用混合模式輸入。引例1在回收調(diào)查問卷數(shù)據(jù)時(shí),為了快速錄入,常把數(shù)據(jù)如下組織在文本文件中:27110011160310150110021165422180110302270230130。。。。。。

其中每行是一張問卷的數(shù)據(jù),1-2列是區(qū)號(hào),1-5列是問卷號(hào),6列是等級(jí)碼,7列是性別,8-9列是年齡,10列是教育程度,11列是職業(yè)代碼,12-15列是收入。應(yīng)如何錄進(jìn)SAS?DATAdiaoch;/*存入diaoch數(shù)據(jù)集,文件名長(zhǎng)度為1~8個(gè)字符。*/INPUTid1-5area1-2level6sex7age8-9edc10ocu11sal12-15;LIST;/*顯示每行的數(shù)據(jù),以便核對(duì)??墒≈?/CARDS;/*告訴SAS,數(shù)據(jù)行從下一行開始讀之*/110011160310950110021165421980110302270232130run;

/*本段程序是典型的按列輸入模式錄入數(shù)據(jù)。*/特點(diǎn):數(shù)據(jù)字段位置固定

28①按列輸入模式對(duì)數(shù)據(jù)字段位置固定的源數(shù)據(jù),用input語(yǔ)句讀入時(shí),可按列模式輸入,其一般形式為:

input變量名1[$]開始列數(shù)-結(jié)束列數(shù)[變量名2…];例:

dataindt01;

infile'd:\zxd\imptdt01.dat'; inputid$1-4age6-7actlevel$9-12sex$14; run; procprintdata=indt01;run;29按列輸入模式示例例:imptdt02.dat中1-9列為日期,10-12列為航班目的地,13-15列為登機(jī)人數(shù)。試建立SAS數(shù)據(jù)集。

filenamedst'd:\zxd\sas';/*給文件夾起別名dst*/ datawork.indt02;

infiledst(imptdt02.dat); inputdata$1-7dest$8-10boarded11-13; run; datatmp;

iinfiledst(imptdt02.dat); inputdata$1-7dest$8-10boarded11-13year6-7; run; procprint;run;引例2數(shù)據(jù)字段位置固定的數(shù)據(jù),有時(shí)帶有定格式,為順利讀取數(shù)據(jù),就要正確解讀特殊格式。下面就是一批有格式的原始數(shù)據(jù):30張三豐77/12/231.68$1,234李斯80/05/162.01$2,200吳留意82/05/161901,800其中每行是一條記錄的數(shù)據(jù),1-6列是姓名,7-14列是生日,15-18列是身高(米),19列后是薪水。應(yīng)如何錄進(jìn)SAS?DATAtmp;INPUTname$6.birthdayyymmdd8.height4.2salcomma8.;CARDS;張三豐77/12/231.68$1,234李斯80/05/162.01$2,200吳留意82/05/161901,800run;/*本段程序是典型的格式化輸入模式錄入數(shù)據(jù)。*/31②格式化模式輸入對(duì)數(shù)據(jù)字段位置固定的源數(shù)據(jù),也可以采用格式化的輸入模式更靈活地建立SAS數(shù)據(jù)集。一般形式:input

指針控制

變量名

輸入格式

[…];

常見的指針控制有:

@n——將列指針移到第n列(指示輸入的絕對(duì)位置) +n——將列指針位置增加n列(指示輸入的相對(duì)位置)

輸入格式是指SAS系統(tǒng)預(yù)定義或用戶自定義的數(shù)據(jù)格式,如:4.2、$4.、comma12.2、yymmdd8.適用范圍:源文件中各變量所在位置必須是規(guī)則的(字段寬度固定);可用指針控制變量讀入的始點(diǎn),終點(diǎn)由輸入格式確定;每個(gè)變量按輸入格式讀入指定的長(zhǎng)度;該模式特點(diǎn)與列模式基本類似,但可讀入多種格式的數(shù)值字段。32輸入/輸出格式類型SAS數(shù)據(jù)輸入/輸出的格式主要有四類:字符型、數(shù)值型、日期時(shí)間型和用戶自定義型。輸入輸出格式的一般形式為

[$][格式名]w.[d] $ 表明為字符型變量的輸入輸出格式;

w. 指明格式的寬度為w(字符數(shù)).對(duì)輸入格式就是讀入的最大字符數(shù),對(duì)輸出格式就是變量顯示時(shí)占據(jù)的最大列數(shù);

d 在數(shù)值型輸出時(shí)指明顯示小數(shù)位數(shù),在數(shù)值型變量輸入時(shí)只指明輸入整數(shù)值中隱含的小數(shù)位數(shù)。33常見的輸入/輸出格式(一)字符型格式 $w.或$charw.數(shù)值輸入格式 w.d(若數(shù)據(jù)中含小數(shù)則d無用)數(shù)值輸出格式 bestw.(w確省值為12,超過寬度w則用科學(xué)計(jì)數(shù)法顯示)數(shù)值輸入格式 commaw.d(可自動(dòng)除去數(shù)據(jù)串中的逗號(hào)、空格、美圓號(hào)、橫線,保留數(shù)字、小數(shù)點(diǎn))數(shù)值輸出格式 commaw.d

dollarw.d(整數(shù)部分每3位加入逗號(hào),后一格式還要再加$于數(shù)值前)34常見的輸入/輸出格式(二)日期輸入格式 yymmddw.mmddyyw.ddmmyyw.日期輸出格式 yymmdd[x]w.

其中x指定年、月、日間的分隔符,它是下列字符之一:b(空格)、c(冒號(hào))、d(橫線,此為缺省值)、n(無分隔)、p(點(diǎn)號(hào))、s(斜杠)。日期輸入輸出格式datew.(可轉(zhuǎn)換30MAY2000形式日期)時(shí)間輸入格式timew.時(shí)間輸出格式timew.d

實(shí)現(xiàn)hh:mm:ss.ss形式時(shí)間值與SAS數(shù)值的轉(zhuǎn)換。日期時(shí)間輸入格式datetimew.輸出格式datetimew.d

實(shí)現(xiàn)ddmmmyy

hh:mm:ss.ss形式日期時(shí)間值與SAS數(shù)值的轉(zhuǎn)換。35格式化輸入示例例:imptdt03.dat中有某科室員工信息,有姓、名、工種、年薪(有逗號(hào)的數(shù)據(jù))四個(gè)字段。dataindt03;infile'd:\zxd\sas\imptdt03.dat';inputLastName$7.@9FistName$5.@15Job3.@19Salarycomma9.;run;procprint;run;36示例:計(jì)算日期間隔datatmp; /*建立數(shù)據(jù)集tmp*/informatd1d2YYMMDD10.;/*設(shè)置變量d1、d2的日期輸入格式*/inputd1d2; /*讀入變量d1、d2的值*/intd=INTCK("day",d1,d2);/*計(jì)算d1、d2日期之間的天數(shù)intd*/d3=INTNX("week",d1,10); /*計(jì)算d1日期后10個(gè)星期時(shí)的日期d3*/formatd1-d3YYMMDD8.; /*設(shè)置變量d1、d2、d3的日期輸出格式*/cards;2001/06/302002/06/30

結(jié)果:2001:08:012001-10-01 OBSD1D2INTDD3procprint; 101-06-3002-06-3036501-09-02run; 201-08-0101-10-016101-10-0737獲取系統(tǒng)的日期、時(shí)間利用date()、time()等函數(shù)獲取系統(tǒng)日期和時(shí)間。例如:dt=date();te=time();利用sysdate、systime系統(tǒng)宏變量獲取SAS啟動(dòng)時(shí)的日期時(shí)間。例如:dd="&sysdate"d;tt="&systime"t;例:

data_null_; a=date();b="&sysdate"d; puta'='b; formatabyymmdds10.; put'a='a'andb='b; put"todayis&sysdate"; run;引例3有時(shí)數(shù)據(jù)字段位置雖不固定,但字段間的分隔符卻是統(tǒng)一的,而數(shù)據(jù)主要是不帶格式的字符型和數(shù)值型。下面就是一批這樣的原始數(shù)據(jù):38張三豐男26

1.68

2234李斯女28

1.71

900諸葛留意男33

1.91800其中每行是一條記錄的數(shù)據(jù),依次是姓名、性別、年齡、身高(米)、薪水各字段,字段間空格分開。應(yīng)如何錄進(jìn)SAS?DATAtmp;INPUTname$sex$ageheightsal;CARDS;張三豐男261.682234李斯女281.71900諸葛留意男331.91800run;/*本段程序是典型的列表輸入模式錄入數(shù)據(jù)。*/特點(diǎn):字段間的分隔符固定

39③列表模式輸入對(duì)分隔符(通常為空格)固定的數(shù)據(jù)源,可以采用自由列表模式輸入數(shù)據(jù)。一般形式為:

input變量名[$][…];/*變量長(zhǎng)度默認(rèn)8,超過會(huì)截?cái)?/

其中,變量名指明數(shù)據(jù)集中要建立的變量,它們出現(xiàn)的順序必須與數(shù)據(jù)源中的數(shù)據(jù)字段順序匹配。例: datascores;

infilecardsdelimiter=','; inputtest1test2test3; cards; 91,87,95 97,.,92 ,1,1 run;

適用范圍:源文件中字段間至少有一個(gè)空格或特定字符分隔(分隔符固定);

字段只能按序輸入;

缺失值必須用句點(diǎn)表示;

字符變量的值不能含有空格,長(zhǎng)度一般不超過8;40Infile語(yǔ)句的選項(xiàng)Infile

語(yǔ)句是為INPUT語(yǔ)句指定數(shù)據(jù)源的配套語(yǔ)句,它的一般形式為:INFILE‘?dāng)?shù)據(jù)源’[選項(xiàng)];(數(shù)據(jù)源為邏輯文件CARDS或DATALINES時(shí),該語(yǔ)句可省略。)常用選項(xiàng)有:

DLM=‘符號(hào)’選項(xiàng):指示數(shù)據(jù)間的分隔符。

DSD選項(xiàng):可將數(shù)據(jù)行中帶引號(hào)的字符串(包括分隔符)作為一般字符串對(duì)待,并且讀入該段時(shí)會(huì)自動(dòng)除去最外層引號(hào);使用DSD后,缺省的分隔符為逗號(hào);不用DSD,多個(gè)相連的分隔符作一個(gè)處理;用了DSD后,兩個(gè)相鄰的分隔符就意味中間有個(gè)缺失值。

MISSOVER選項(xiàng):當(dāng)數(shù)據(jù)源中的一條記錄的數(shù)據(jù)不夠被INPUT語(yǔ)句中的變量讀取時(shí),尚未寫入的變量都置為缺失值;該選項(xiàng)缺省時(shí)自動(dòng)為FLOWOVER選項(xiàng),即從數(shù)據(jù)源的下一記錄中取數(shù)據(jù)填補(bǔ)上。

FIRSTOBS=n1OBS=n2

選項(xiàng):指示在數(shù)據(jù)源中讀哪些數(shù)據(jù)行。41列表模式輸入示例源數(shù)據(jù)文件imptdt04中含性別、年齡、銀行卡數(shù)、銀行卡使用次數(shù)、公司卡數(shù)、公司卡使用次數(shù)6字段數(shù)據(jù),均以空格分隔,試建數(shù)據(jù)集。dataint04;infile'd:\zxd\sas\imptdt04.dat';inputsex$agebankcardfrebank

depcard

fredep;run;42用Length語(yǔ)句設(shè)置變量長(zhǎng)度一般情況下,變量的長(zhǎng)度默認(rèn)為8個(gè)字節(jié),這對(duì)字符型變量而言,只能存放8個(gè)字符(4個(gè)漢字)。length語(yǔ)句可改變變量的長(zhǎng)度屬性,一般形式為: length變量名表[$]長(zhǎng)度.;例: datatmp; lengthname$12.; inputname$age; cards;

zhangsanfeng56

lierwa66

wangwujing45 ;43帶格式修飾的列表輸入為突破變量的默認(rèn)長(zhǎng)度限制以及解釋特殊格式的數(shù)據(jù),在列表輸入模式中還可以加入輸入格式修飾說明,一般形式為:

input變量名:[$]輸入格式.[…];例如:imptdt06.dat中城市名超過8字符,兩數(shù)值字段中有逗號(hào)。dataindt06;infile'd:\zxd\sas\imptdt06.dat';inputcity:$12.pop70:comma9.pop80:comma9.;run;procprint;run;引例4早期留下的數(shù)據(jù)往往不規(guī)則,有時(shí)字段前還帶有字段名,就像下面這批原始數(shù)據(jù):44name=張三豐sex=男age=26sal=223.4name=李斯sex=女a(chǎn)ge=28sal=523.6name=諸葛留意sex=男age=33sal=1260.5應(yīng)如何錄進(jìn)SAS?DATAtmp;INPUTname=$sex=$age=sal=;CARDS;name=張三豐sex=男age=26sal=223.4name=李斯sex=女a(chǎn)ge=28sal=523.6name=諸葛留意sex=男age=33sal=1260.5run;特點(diǎn):字段前有“字段名=”標(biāo)記

45④命名模式輸入*

當(dāng)源數(shù)據(jù)文件中的數(shù)據(jù)字段里包含字段名時(shí),往往需要采用命名模式輸入較為方便。一般形式為:

INPUT[指針]變量名=[$][...][@|@@];

INPUT變量名=[$]始列[-終列][.小數(shù)位][@|@@];

INPUT[指針]變量名=informat.[@|@@];例:datatem;

infilecards; inputname=$10.sex=$1.birthday=height=3.;

informatbirthdaydate7.;/*此例中birthday=date7.就不行!?*/ formatbirthdayyymmdd10.; cards; name=AlexBrucesex=Mbirthday=13Jun67height=174 birthday=08Aug54sex=Fname=CathyLee ; run; /*注意:命名模式后面不能再跟其它輸入模式*/46INFORMAT/FORMAT語(yǔ)句一般形式:INFORMAT變量

格式

[…];FORMAT變量

格式

[…];功能:該語(yǔ)句用于設(shè)置變量的缺省輸入/輸出格式。若語(yǔ)句中變量后沒指定格式,則表示移去原有的格式。輸入格式的具體種類見前面章節(jié)。注意:INFORMAT語(yǔ)句不會(huì)影響數(shù)值變量輸入值的實(shí)際長(zhǎng)度*,但可能會(huì)截?cái)嘧址妥兞康妮斎胫甸L(zhǎng)度(見下例)。47混合模式輸入

對(duì)一些復(fù)雜的非標(biāo)準(zhǔn)的源數(shù)據(jù)文件,各數(shù)據(jù)字段需要不同的讀入模式才能正確匹配,這時(shí)可在input語(yǔ)句中混合使用各種讀入模式。例:imptdt07.dat中前11列是社保號(hào),接著7列是開始雇傭日期,20-25列是逗號(hào)分隔的年薪,27列開始的字段是部門,最后是電話分機(jī)號(hào)。Datamixdimpt;Infile'd:\zxd\sas\imptdt07';InputSSN$1-11@12HireDatedate7.@20Salarycomma6.Department:$9.Phone_No;FormatHireDateyymmdd10.SalaryDollar7.;Run;你知道這里用了幾種輸入模式嗎?程序可以改動(dòng)嗎?48處理數(shù)據(jù)步的全過程SAS系統(tǒng)執(zhí)行數(shù)據(jù)步的過程主要分為兩個(gè)階段:?編譯數(shù)據(jù)步

語(yǔ)法檢查,代碼轉(zhuǎn)換(機(jī)器碼) 創(chuàng)建輸入緩沖區(qū)(存放數(shù)據(jù)源中的一行記錄)

創(chuàng)建一個(gè)程序數(shù)據(jù)向量PDV(可暫存數(shù)據(jù)集的當(dāng)前一條觀測(cè))

創(chuàng)建SAS數(shù)據(jù)集的描述部分(數(shù)據(jù)集名稱、觀測(cè)變量個(gè)數(shù)和變量屬性等)?執(zhí)行數(shù)據(jù)步49程序向量數(shù)據(jù)緩沖器PDVPDV(ProgramDataVector)來存放當(dāng)前的一個(gè)觀測(cè);觀測(cè)數(shù)據(jù)經(jīng)處理后存入數(shù)據(jù)集。這是數(shù)據(jù)步的主要工作場(chǎng)所。 PDV中包括兩個(gè)自動(dòng)生成的臨時(shí)變量:_N_(記錄數(shù)據(jù)步執(zhí)行的次數(shù))和_ERROR_(錯(cuò)誤標(biāo)志:0為無錯(cuò)誤,1為發(fā)生錯(cuò)誤)數(shù)據(jù)步中出現(xiàn)的變量(包括數(shù)據(jù)集內(nèi)的變量)50數(shù)據(jù)步執(zhí)行階段在執(zhí)行期間,SAS系統(tǒng)執(zhí)行以下步驟:(除非另有指向)1)PDV中所有的變量值被初始化為缺失值;2)輸入緩沖器據(jù)input語(yǔ)句的數(shù)據(jù)需求,讀入源數(shù)據(jù)文件的相應(yīng)記錄行,并寫相應(yīng)的數(shù)據(jù)字段到PDV;3)每個(gè)語(yǔ)句被順序執(zhí)行,并可修改PDV形成當(dāng)前觀測(cè);4)數(shù)據(jù)步語(yǔ)句一遍執(zhí)行后,PDV中的值寫入數(shù)據(jù)集;*5)PDV中外部變量初始化為確失值,程序流程回到2);6)對(duì)數(shù)據(jù)源文件的每條記錄都按上面步驟執(zhí)行一次;7)重復(fù)以上步驟直到外部文件中數(shù)據(jù)結(jié)束。51input語(yǔ)句后的單尾符@一個(gè)數(shù)據(jù)步內(nèi)可以有多條input語(yǔ)句。但是當(dāng)執(zhí)行完一條input語(yǔ)句后,一般將放棄緩沖區(qū)內(nèi)現(xiàn)有源數(shù)據(jù)行,而從源文件中再取一條記錄更新緩沖區(qū)。若要保持現(xiàn)有源數(shù)據(jù)行供下一條input使用其數(shù)據(jù),則應(yīng)在input語(yǔ)句的最后加入@跟蹤符。例:datatmp1;inputx;inputy;cards;112233445566;run;datatmp2;inputx@;inputy;cards;112233445566;run;datatmp3;inputx@;inputy@;cards;112233445566;run;52input語(yǔ)句后的雙尾符@@一般情況下,當(dāng)程序執(zhí)行到數(shù)據(jù)步底部后,也會(huì)從源數(shù)據(jù)文件中另取一行記錄來更新緩沖區(qū)內(nèi)原有數(shù)據(jù)。若要緩沖區(qū)內(nèi)原有數(shù)據(jù)不放棄,使其在數(shù)據(jù)步的下一循環(huán)中仍可用,則應(yīng)在input語(yǔ)句最后加上@@跟蹤符。例:datatmp5;inputxy@@;cards;112233445566;run;datatmp6;inputxy;cards;112233445566;run;datatmp7;inputa@;inputxy@@;cards;112233445566;run;datatmp8;inputa@;inputx1-2y@@;if_n_=10thenstop;cards;112233445566;run;53源數(shù)據(jù)的指針控制當(dāng)SAS從數(shù)據(jù)行中讀取數(shù)據(jù)時(shí),它用指針來跟蹤當(dāng)前數(shù)據(jù)的位置;指針控制符可為input語(yǔ)句指示數(shù)據(jù)源中當(dāng)前數(shù)據(jù)所在的行、列位置。列指針控制符“+n”表示指針右移n列(n為負(fù)則左移n列);列指針控制符“@n”表示指針移到第n列(絕對(duì)位置);列指針控制符“@‘character-string’”表示把指針移到數(shù)據(jù)行中字符串character-string后第一個(gè)非空格列。行指針控制符“#n”表示指針移到第n行;(當(dāng)一條觀測(cè)有幾行源數(shù)據(jù)時(shí),起作用)行指針控制符“#(expression)”表示指針移到表達(dá)式的值(必須為整數(shù))所指的行。行指針控制符“/”表示指針移到下一行的第一列。54指針控制符用法示例行指針用法示例:datatmp1;inputname:$10.age/score1-score3;cards;zhangsan12889867lisi13779886;run;列指針用法示例1:datatmp2;m=-1;/*左移一列*/inputx1-4+my@2id$2.;/*dropm;*/cards;123452468013579;run;列指針用法示例2:datatmp3;inputid$2.age3-4@'size='x;list;cards;0116size=54.230215size=45.661318size=61.01;run;55由計(jì)算生成變量在數(shù)據(jù)步中,可以用賦值語(yǔ)句來生成新變量。一般形式為: 變量=表達(dá)式;功能:將表達(dá)式的計(jì)算值賦給變量,若該變量不在數(shù)據(jù)集中,則新增之。例:輸入工號(hào)、生日、工資、獎(jiǎng)金,計(jì)算年齡和總收入。datatmp;inputid$2.@4birthdayyymmdd8.m1m2;age=intck('year',birthday,date());total=(m1+m2)*(1-0.05);cards;0166/07/03598.5012001070/01/23504.671100;run;56數(shù)據(jù)步內(nèi)同時(shí)建多個(gè)數(shù)據(jù)集利用條件控制語(yǔ)句if與輸出語(yǔ)句output配合,可在一個(gè)數(shù)據(jù)步內(nèi)同時(shí)建立多個(gè)數(shù)據(jù)集。例如:利用同一數(shù)據(jù)源建立兩個(gè)數(shù)據(jù)集

datatmp1tmp2; inputname$agescore@@; ifage<=30thenoutputtmp1; elseoutputtmp2; cards;JingJG2889LiM3265WangJ2198LiuB6056procprint;run;57IF語(yǔ)句及功能一般形式:IF表達(dá)式

[THEN語(yǔ)句1;[ELSE語(yǔ)句2]];功能:當(dāng)表達(dá)式為真時(shí),執(zhí)行語(yǔ)句1,當(dāng)表達(dá)式為假時(shí)執(zhí)行語(yǔ)句2(若無ELSE子句,則執(zhí)行IF語(yǔ)句之后的其它語(yǔ)句);當(dāng)任何子句均無,僅?!癐F表達(dá)式;”,則表示‘表達(dá)式’為‘假’的觀測(cè)不再處理,也不進(jìn)入數(shù)據(jù)集。注意:如果THEN或ELSE后需要一組語(yǔ)句時(shí),可放在“DO;”和“END;”語(yǔ)句之間。IFexpressionTHENDO;

statements;...

END;ELSEDO;

statements;...

END;58OUTPUT語(yǔ)句及功能(1)功能將PDV中當(dāng)前的處理觀測(cè)值(記錄)輸出到OUTPUT指定的數(shù)據(jù)集中,該數(shù)據(jù)集必須已在DATA語(yǔ)句中定義過。注意:一旦在DATA步中出現(xiàn)了OUTPUT語(yǔ)句,則原來在數(shù)據(jù)步末尾隱含的OUTPUT功能便不再起作用了。(2)用法格式:OUTPUT[數(shù)據(jù)集名];若省略數(shù)據(jù)集名,則當(dāng)前觀測(cè)值寫到本數(shù)據(jù)步正在建立的數(shù)據(jù)集。

59示例生成有4條記錄的數(shù)據(jù)集:datatmp;inputx1-x3@@; y=x1;output; y=x2;output; cards; 123456 procprint; run;求和并統(tǒng)計(jì)大于8的輸入數(shù)據(jù)個(gè)數(shù):datainfo;inputx@@;retainn0sumx0;ifx<8thengotook;putx;n=n+1;ok:sumx=sumx+x;cards;6313844112procprint;run;60RETAIN語(yǔ)句和累加語(yǔ)句RETAIN語(yǔ)句功能及用法:RETAIN語(yǔ)句使其中的變量在數(shù)據(jù)步的每次循環(huán)時(shí),不被重新初始化。(有點(diǎn)類似C中的靜態(tài)變量。)

格式:RETAIN變量名1[初值1][變量2[初值2]…];

或:RETAIN變量名表[(初值表)];累加語(yǔ)句功能及用法:累加語(yǔ)句可對(duì)某一數(shù)值型變量求累加值。 一般格式:變量+表達(dá)式;在第一個(gè)觀測(cè)值未讀入前,該變量的初值為零,在數(shù)據(jù)步的每次循環(huán)中重復(fù)加入表達(dá)式值,若表達(dá)式計(jì)算結(jié)果為缺失值時(shí),將作零處理。61示例求和與平方和:datatotal;inputx@@;retainsx0sx20;sx=sx+x;sx2=sx2+x*x;cards;254367run;求薪水總數(shù):datatmp; inputname$salary@@; total+salary; cards; Xu800Zhou600procprint;run;62讀層次數(shù)據(jù)文件用數(shù)據(jù)步讀入的文本數(shù)據(jù)文件中,有一類稱為層次文件,它的記錄根據(jù)其某個(gè)字符段可區(qū)分為是記錄頭或是詳細(xì)記錄。例如,有一數(shù)據(jù)文件census.dat中,以H開頭的行是頭記錄,其后包含一個(gè)地址;以P開始的行是詳細(xì)記錄,記錄居住在該地址人員的姓名,年齡和性別。dataPeople(drop=type);infile'H:\sas&matlab講義\census.dat'truncover;retainAddress;inputtype$1.@;iftype='H'theninput@3Address$15.;input@3Name$9.AgeSex$;run;TRUNCOVER選項(xiàng):如果末端的數(shù)據(jù)不夠列寬則從這里截?cái)?,讀取的部分?jǐn)?shù)據(jù)被保留下來,當(dāng)前變量之后的變量就會(huì)置為缺失值。63SAS函數(shù)SAS函數(shù)是一個(gè)程序,它可以對(duì)一個(gè)或多個(gè)參數(shù)進(jìn)行計(jì)算后返回一個(gè)值。每個(gè)SAS函數(shù)有一個(gè)關(guān)鍵字名。調(diào)用函數(shù)應(yīng)寫出函數(shù)名和括號(hào)內(nèi)的參數(shù):

函數(shù)名(參數(shù),...)(注意:函數(shù)的參數(shù)可以是常數(shù)、變量、函數(shù)或表示式)當(dāng)參數(shù)多于一個(gè)時(shí),參數(shù)之間應(yīng)該用逗號(hào)分隔,也可寫成如下形式:

函數(shù)名(OF變量1—變量n)

函數(shù)名(OF變量1變量2變量3)例如: SUM(OFX1—X100Y1—Y100) SUM(OFXYZ) SUM(X1,X2,X3,X4)64SAS函數(shù)功能測(cè)試的小程序測(cè)試函數(shù)功能的一個(gè)簡(jiǎn)單的程序示例:data_null_;y=sqrt(3);put‘y=‘,y;run;上述程序意圖了解sqrt(根式)函數(shù)的功能、用法。65常用函數(shù)(一)

函數(shù)名功能簡(jiǎn)介函數(shù)名功能簡(jiǎn)介ABS(X)返回X的絕對(duì)值A(chǔ)RCOS(x)反余弦MAX(X,Y,...)返回X,Y,...中的最大值A(chǔ)RSIN(x)反正弦MIN(X,Y,...)返回X,Y,...中的最小值COSH(x)雙曲余弦MOD(x,y)計(jì)算x/y的余數(shù)SINH(x)雙曲正弦SIGN(x)返回參數(shù)x的符號(hào)或0PROBBNML(p,n,r)二項(xiàng)式概率分布函數(shù)SQRT(x)計(jì)算x的平方根PROBCHI(x,df)卡方概率分布函數(shù)DIM(array)返回?cái)?shù)組中元素個(gè)數(shù)PROBF(x,ndf,ddf)F分布函數(shù)EXP(x)e的x次冪PROBNORM(x)標(biāo)準(zhǔn)正態(tài)分布函數(shù)LOG(x)計(jì)算x的自然對(duì)數(shù)PROBT(p)T分布函數(shù)LOG10(x)計(jì)算x的常用對(duì)數(shù)CINV(p,df,nc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論