3.原始數(shù)據(jù)讀入SAS資料_第1頁
3.原始數(shù)據(jù)讀入SAS資料_第2頁
3.原始數(shù)據(jù)讀入SAS資料_第3頁
3.原始數(shù)據(jù)讀入SAS資料_第4頁
3.原始數(shù)據(jù)讀入SAS資料_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)步讀入數(shù)據(jù)原始數(shù)據(jù)分類

原始數(shù)據(jù)一般分為字符和數(shù)值兩種類型,數(shù)值數(shù)據(jù)又分為標(biāo)準(zhǔn)數(shù)值數(shù)據(jù)和非標(biāo)準(zhǔn)數(shù)值數(shù)據(jù)。標(biāo)準(zhǔn)數(shù)據(jù)是由字符或者數(shù)值組成的可以被列表、列、格式化、命名輸入方式讀入的數(shù)據(jù),如Male,1166.42。非標(biāo)準(zhǔn)數(shù)據(jù)只能在輸入格式的幫助下讀入的數(shù)據(jù)。如非標(biāo)準(zhǔn)的數(shù)值數(shù)據(jù),可能包含逗號(hào),空格等符號(hào)。日期和時(shí)間數(shù)值。十六進(jìn)制和二進(jìn)制數(shù)值。標(biāo)準(zhǔn)數(shù)值數(shù)據(jù)只包含數(shù)字,小數(shù)點(diǎn)或負(fù)號(hào)。非標(biāo)準(zhǔn)數(shù)值數(shù)據(jù)則包含其它的特殊字符,如千分號(hào),美元符號(hào)等。

讀取數(shù)值數(shù)據(jù)的規(guī)則數(shù)值前面的括號(hào)或者減號(hào)符號(hào)表示該數(shù)值為負(fù)。首位有一個(gè)或者多個(gè)零不影響對(duì)相應(yīng)變量的賦值。SAS不把數(shù)值尾部的空格默認(rèn)為0。數(shù)值數(shù)據(jù)的前后都可以有空格,但是數(shù)字中間一般不能有(除非用COMMA.、BZ.等格式讀入)。字符數(shù)據(jù)

字符數(shù)據(jù)是由一系列字符組成的數(shù)據(jù)。

下面任一種情況下,INPUT語句認(rèn)定讀入變量的值是字符值。INPUT語句中變量名后跟一個(gè)美元符號(hào)$;使用字符輸入格式;要讀入數(shù)據(jù)的變量已經(jīng)被定義為字符型。原始數(shù)據(jù)呈現(xiàn)形式

原始數(shù)據(jù)的呈現(xiàn)形式一般分為呈現(xiàn)在SAS編輯窗口的數(shù)據(jù)行,和儲(chǔ)存在外部文件中的原始數(shù)據(jù)例如,

編輯窗口下,數(shù)據(jù)行形式的原始數(shù)據(jù)。dataweight;inputPatientID$Week1Week8Week16;loss=Week1-Week16;

datalines;2477195177163243122021319824561731661552412135125116;儲(chǔ)存在外部文件中的原始數(shù)據(jù),TXT文本格式。2477195177163243122021319824561731661552412135125116SAS數(shù)據(jù)步作用錄入數(shù)據(jù)并轉(zhuǎn)化為SAS數(shù)據(jù)集編輯數(shù)據(jù),包括檢查和修改數(shù)據(jù)中的錯(cuò)誤、計(jì)算新變量等將數(shù)據(jù)寫入磁盤對(duì)已有的數(shù)據(jù)集進(jìn)行管理。如取子集、合并及更新數(shù)據(jù)集等例1:DATA

da1;

INPUT

x1x2x3;

y=x1+x2+x3;

CARDS;

31.20.522.40.953.20.884.11.173.30.6;

RUN;

以上這些語句組成DATA步。提交后,SAS系統(tǒng)創(chuàng)建一個(gè)名為da1的SAS數(shù)據(jù)集。它包含5個(gè)觀測(cè)、4個(gè)變量。DATA步是用DATA語句開始的一組SAS語句。

SAS數(shù)據(jù)集實(shí)質(zhì)上是一張關(guān)系型數(shù)據(jù)表,即通常所見到的二維表格,一行表示一個(gè)觀察(Observation),一列表示一個(gè)變量(Variable),行列的交叉點(diǎn)就是該觀察在該變量上的取值。參見下頁示意圖。SAS數(shù)據(jù)集的建立SAS數(shù)據(jù)集(部分)ObservationsVariablesValueDATA語句;INPUT語句;(用于DATA步的其它SAS語句)

CARDS語句;[數(shù)據(jù)行];RUN;(一)直接在程序中讀取數(shù)據(jù)1.DATA語句

DATA語句表示一個(gè)數(shù)據(jù)步的開始,并給出正被創(chuàng)建的SAS數(shù)據(jù)集的名字。語句格式:

DATA[名字1][名字2]...

例如:

dataa;

dataonemydata;

使用INPUT語句讀入原始數(shù)據(jù)

INPUT語句的用途有兩方面:讀入外部數(shù)據(jù)文件中的數(shù)據(jù);讀入CARDS語句后面的數(shù)據(jù)。2.INPUT語句

INPUT語句的五種輸入方式

簡(jiǎn)單方式(自由方式):INPUT<specification(s)><@|@@>;列方式:INPUTvariable<$>start-column<-end-column><.decimalplaces><@|@@>;格式化方式:INPUT<pointer-control>variableinformat.<@|@@>;INPUT<pointer-control>(variable-list)(informat-list)<@|@@>;INPUT<pointer-control>(variable-list)(<n*>informat.)<@|@@>;列表方式:INPUT<pointer-control>variable<$><&><@|@@>;INPUT<pointer-control>variable<:|&|~><informat.><@|@@>;命名方式:INPUT<pointer-control>variable=<$><@|@@>;INPUTvariable=<$>start-column<-end-column><.decimals><@|@@>;INPUT<pointer-control>variable=informat.<@|@@>;選項(xiàng)說明specification(s)變量及其格式的詳細(xì)說明variable-list列出要讀入數(shù)據(jù)值的變量@執(zhí)行下一個(gè)INPUT語句時(shí)指針移到下一記錄行,要求一條記錄必須對(duì)應(yīng)一個(gè)數(shù)據(jù)行@@執(zhí)行下一個(gè)INPUT語句時(shí)指針保持在當(dāng)前記錄行,不要求一條記錄對(duì)應(yīng)一個(gè)數(shù)據(jù)行$定義字符型變量start-column規(guī)定變量值在記錄行中的起始列end-column規(guī)定變量值在記錄行中的終止列decimalplaces小數(shù)點(diǎn)位置pointer-control

移動(dòng)輸入指針到指定的行或列上informat列出變量的輸入格式;informat-list-列出變量列表對(duì)應(yīng)的輸入格式列表decimals規(guī)定小數(shù)部分的位數(shù)自由格式

INPUTvariable-name-list[$][@|@@];$:此符號(hào)前的變量為字符型。默認(rèn)為數(shù)值型。表輸入方式的特點(diǎn):(1)順序輸入;(2)輸入的數(shù)據(jù)之間至少有一個(gè)空格;(3)使用圓點(diǎn)“.”而不是空格作為缺失值;(4)變量的順序和它們的數(shù)據(jù)值順序要一致,且個(gè)數(shù)相符;(5)字符型數(shù)據(jù)的默認(rèn)寬度為8個(gè)字符,但可以使用LENGTH等語句先定義字符變量的長(zhǎng)度。databc;inputx1x2x3x4$;cards;123addabc455.3bsddrg15248cssdrt54;run;行保持符“@”“@@”的使用@的作用:當(dāng)程序中有多條input語句時(shí),前一條input語句末尾使用@,表示數(shù)據(jù)指針不換行,后一條input語句接著上一條input語句讀數(shù)結(jié)束地方讀取數(shù)據(jù)。當(dāng)用在程序最后一條input語句中時(shí),不起作用。@@的作用:用在程序中的最后一條input語句中,表示指針不換行,程序下一輪執(zhí)行時(shí),input語句接著其后讀取數(shù)據(jù)。Dataex;Inputx;Cards;1285;Run;Dataex;Inputx@@;Cards;1285;Run;@@表示指針不換行,下一輪執(zhí)行時(shí),仍就用當(dāng)前的input語句讀取本行的其余數(shù)據(jù),每讀完一個(gè)數(shù)據(jù),控制指針就移到下一個(gè)數(shù)據(jù)的開頭,繼續(xù)讀入數(shù)據(jù)。Dataa;Input

x

@;Inputy;Cards;12853697;Run;請(qǐng)分析上面程序產(chǎn)生的數(shù)據(jù)集Datab;Input

x

;Inputy@@;Cards;12853697;Run;Datac;Input

x

@

;Inputy@@;Cards;12853697;Run;Datad;Input

x

@

;Inputy@;Cards;12853697;Run;3.OUTPUT語句OUTPUT語句把當(dāng)前的觀測(cè)輸出到正在被創(chuàng)建的SAS數(shù)據(jù)集中去。語句格式

OUTPUT[data-set-name];OUTPUT;語句后不加說明項(xiàng)。這時(shí),把當(dāng)前這個(gè)觀測(cè)輸出到DATA語句命名的數(shù)據(jù)集中去。下面的例子利用OUTPUT語句從一個(gè)數(shù)據(jù)行生成多個(gè)觀測(cè):datarepeat;inputsub$mea1-mea3;dropmea1-mea3;mea=mea1;output;mea=mea2;output;mea=mea3;output;cards;a254b362;procprint;title‘?dāng)?shù)據(jù)集repeat’;run;

數(shù)據(jù)集repeatObssubmea

1a2

2a5

3a4

4b3

5b6

6b2OUTPUT窗口:OUTPUTdata-set-name;語句后跟一個(gè)數(shù)據(jù)集名,即將當(dāng)前觀測(cè)輸出到這個(gè)指定的數(shù)據(jù)集中去。下面的例子是利用OUTPUT語句在一個(gè)DATA步中同時(shí)產(chǎn)生多個(gè)SAS數(shù)據(jù)集。DATAyear1year2;INPUTname$sex$yrs;IFyrs<=12THENoutputyear1;ELSEoutputyear2;CARDS;數(shù)據(jù)行;RUN;(二)數(shù)據(jù)在外部文本文件中例2:在“c:\mydata\”子目錄下存放有一個(gè)名為id.txt的文件,內(nèi)容如下:(第一列為姓名,第二列為電話)注意:數(shù)據(jù)之間以空格分隔

欲用上述數(shù)據(jù)來建立一個(gè)SAS數(shù)據(jù)集,可用下面的DATA步來完成:

DATA

da2;

INFILE

‘c:\mydata\id.txt’;

INPUT

name$phone;

RUN;Jinhua 48332728jianghon 47586978taoxian 23459734zhaoheng 85743627shanmei 12395863xuli 74857362xinwei 23485748

從外部文本文件中讀入數(shù)據(jù)來建立SAS數(shù)據(jù)集的一般形式為:

DATA語句;

INFILE語句;

INPUT語句;

(用于DATA步的其它SAS語句) RUN語句;這里,需要注意兩點(diǎn):不需要CARDS語句。INFILE語句的作用是打開一個(gè)外部文本文件,其格式為:

INFILE’文件說明’;這里,文件說明是指所要引用的外部文件所在的磁盤路徑和文件全名,應(yīng)用單引號(hào)將文件說明括起來。

如果數(shù)據(jù)不是以空格分隔的,而是以制表符分隔(常見的情況是:將excel數(shù)據(jù)直接拷貝到文本文件中),則應(yīng)在infile語句中加入選項(xiàng):expandtabs如:

DATA

da2;

INFILE

‘c:\mydata\id.txt’expandtabs;

INPUT

name$phone;

RUN;(三)數(shù)據(jù)來自其它SAS數(shù)據(jù)集從一個(gè)或幾個(gè)已存在的SAS數(shù)據(jù)集產(chǎn)生新的SAS數(shù)據(jù)集的DATA步的一般形式為:

DATA語句;

SET語句;(或者,MERGE語句;) (用于DATA步的其它SAS語句) RUN;這里,SET、MERGE語句用來識(shí)別已存在的SAS數(shù)據(jù)集。例如:datada3;Set

da1;/*da1是已經(jīng)存在的SAS數(shù)據(jù)集*/ifx1<=5;/*選擇x1小于或等于5的觀測(cè)*/run;(四)直接從其它數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)常見的格式有:Excel格式數(shù)據(jù)(*.xls)Access格式數(shù)據(jù)(*.mdb)DBF格式數(shù)據(jù)(*.dbf)文本文件格式數(shù)據(jù)(*.txt)導(dǎo)入方法:File

Importdata…

然后依次按要求選擇File

Importdata選擇需要導(dǎo)入SAS的文件類型,點(diǎn)擊Next點(diǎn)擊Browse...,打開需要導(dǎo)入SAS的數(shù)據(jù)文件打開數(shù)據(jù)文件,打擊Next指定導(dǎo)入到SAS后的邏輯庫名(Library)及數(shù)據(jù)集名(Member)配置完成后點(diǎn)擊Next(可選)或Finish上一步點(diǎn)擊Next新建一個(gè)SAS程序文件,保存用ProcImport過程導(dǎo)入數(shù)據(jù)所需的語句點(diǎn)擊Finish出現(xiàn)此行信息,顯示導(dǎo)入成功。數(shù)據(jù)集名為cancer邏輯庫名為work打開生成的cancer.sas文件向?qū)е刑峁┑膸讉€(gè)信息xls格式化中數(shù)據(jù)SAS數(shù)據(jù)集中數(shù)據(jù)Data步的內(nèi)部運(yùn)行機(jī)制針對(duì)每個(gè)觀察執(zhí)行一次所有語句(跳轉(zhuǎn)除外)相當(dāng)于一個(gè)內(nèi)部循環(huán)datada1;inputx1x2x3;y=x1+x2+x3;cards;

31.20.522.40.953.20.884.11.173.30.6;Run;

這些語句要求SAS產(chǎn)生一個(gè)名為da1的數(shù)據(jù)集,從輸入數(shù)據(jù)行讀3個(gè)數(shù)值給相應(yīng)的3個(gè)變量,并建立第四個(gè)變量y。在讀入數(shù)據(jù)時(shí),SAS將變量x1,x2,x3視為一個(gè)程序數(shù)據(jù)向量,按INPUT語句的指示讀當(dāng)前記錄的數(shù)據(jù)值,然后又執(zhí)行程序語句,把y的值添加到程序程序數(shù)據(jù)向量中去。因此,對(duì)這個(gè)DATA步而言,程序數(shù)據(jù)向量包含4個(gè)變量:x1,x2,x3,y。當(dāng)最后一個(gè)程序語句執(zhí)行后,在程序數(shù)據(jù)向量中的這些值(即一個(gè)觀測(cè))自動(dòng)地輸送到正被創(chuàng)建的數(shù)據(jù)集da1中,然后SAS返回去再執(zhí)行DATA步。

我們這個(gè)例子中共有5行數(shù)據(jù),則這個(gè)DATA步將執(zhí)行5次,數(shù)據(jù)集da1中包含5個(gè)觀測(cè),每個(gè)觀測(cè)有4個(gè)變量。SAS邏輯庫:臨時(shí)數(shù)據(jù)集與永久數(shù)據(jù)集邏輯庫指與存放SAS文件的目錄相關(guān)聯(lián)的代號(hào)(名字)代號(hào)就是邏輯庫名邏輯庫名定義邏輯庫方法1:通過Libname語句定義邏輯庫例如:建立與D:\SASdata目錄相關(guān)聯(lián)的邏輯庫,邏輯庫名為Mydata。要求:D:\SASdata目錄必須已經(jīng)存在Libnamemydata"D:\SASdata";方法2:通過窗口定義邏輯庫點(diǎn)擊這個(gè)按鈕(NewLibrary)點(diǎn)擊OK兩個(gè)邏輯庫均與同一目錄關(guān)聯(lián)D:\mydata保存SAS數(shù)據(jù)集到指定邏輯庫中用法:data邏輯庫名.數(shù)據(jù)集名;例如:datamydata.cancer;inputidx;cards;1126811380;run;使用條件:mydata必須事先定義,即在Libraries中有這個(gè)邏輯庫中間用小數(shù)點(diǎn)(.)連接臨時(shí)數(shù)據(jù)集、永久數(shù)據(jù)集臨時(shí)數(shù)據(jù)集指保存在WORK邏輯庫的數(shù)據(jù)集在日志窗口中顯示W(wǎng)ORK.XXX的數(shù)據(jù)集為臨時(shí)數(shù)據(jù)集在data語句中不指定邏輯庫名時(shí),默認(rèn)保存到work邏輯庫中eg.datacancer;退出SAS時(shí),WORK中的文件會(huì)被自動(dòng)刪除永久數(shù)據(jù)集指保存在非WORK邏輯庫的數(shù)據(jù)集退出SAS時(shí),文件不會(huì)被刪除數(shù)據(jù)的輸出

前面討論了解SAS數(shù)據(jù)集的建立,即如何將數(shù)據(jù)轉(zhuǎn)換為SAS數(shù)據(jù)集。下面我們介紹數(shù)據(jù)的輸出。這里的“輸出”有三層意義:將數(shù)據(jù)輸出到LOG窗口;將數(shù)據(jù)輸出到系統(tǒng)內(nèi)部的另一個(gè)SAS數(shù)據(jù)集;將數(shù)據(jù)輸出到一個(gè)外部文件。用于數(shù)據(jù)輸出的語句有很多,我們主要介紹以下三條語句。一.PUT語句在DATA步中,PUT語句可以把內(nèi)容輸出到LOG窗口,或者用FILE語句定義過的外部文件。

PUT語句主要有以下表輸出、列輸出和格式化輸出三種格式,我們只介紹表輸出格式:表輸出格式(自由輸出格式):

PUT<pointer-control><Var-list><@|@@>;例如:dataclass;inputname$sex$age;put

namesexage;cards;henrym13joem14henriettf11;run;dataclass;87inputname$sex$age;88putnamesexage;89cards;henrym13joem14henriettf11NOTE:ThedatasetWORK.CLASShas3observationsand3variables.NOTE:DATAstatementused:realtime0.05seconds93;94run;LOG窗pointer-control(指針控制)

@n移動(dòng)指針到第n列.

@(expression)移動(dòng)指針到表達(dá)式所指定的列.

#n移動(dòng)指針到第n行.

#(expression)移動(dòng)指針到表達(dá)式所指定的行.

@|@@指針保持在當(dāng)前行當(dāng)前位置.例如:Dataa;doi=1to4;sq=i**2;put#(i+1)@(i*5+2)isq@;end;Run;輸出結(jié)果如下1

1

2

4

3

9

4

16二.FILE語句

FILE語句用于定義當(dāng)前的輸出文件,這個(gè)當(dāng)前文件一定是一個(gè)外部文件,一般要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論