




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Chapter3 SASChapter3 SAS數(shù)據(jù)管理數(shù)據(jù)管理 Chapter3 SASChapter3 SAS數(shù)據(jù)管理數(shù)據(jù)管理 一、一、SASSAS數(shù)據(jù)集的建立數(shù)據(jù)集的建立 二、二、SASSAS數(shù)據(jù)集的瀏覽與修改數(shù)據(jù)集的瀏覽與修改 三、三、SASSAS數(shù)據(jù)集的高級管理數(shù)據(jù)集的高級管理 下一頁返回本節(jié)首頁 一、一、SASSAS數(shù)據(jù)集的建立數(shù)據(jù)集的建立 (一)使用(一)使用INPUTINPUT語句輸入數(shù)據(jù)語句輸入數(shù)據(jù) (二)利用(二)利用 VIEWTABLE VIEWTABLE 新建數(shù)據(jù)集新建數(shù)據(jù)集 (三)將其他格式的數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)集(三)將其他格式的數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)集 上一頁下一頁返回本節(jié)
2、首頁 (一)使用(一)使用INPUTINPUT語句輸入數(shù)據(jù)語句輸入數(shù)據(jù) 程序中直接輸入程序中直接輸入 CARDS;CARDS; 數(shù)據(jù)行數(shù)據(jù)行 ; ; infileinfile語句讀入數(shù)據(jù)語句讀入數(shù)據(jù) 上一頁下一頁返回本節(jié)首頁 程序中直接輸入程序中直接輸入 自由格式自由格式 列方式列方式 格式輸入格式輸入 上一頁下一頁返回本節(jié)首頁 自由格式自由格式 按順序列出每個觀測的各個變量名,中間用空按順序列出每個觀測的各個變量名,中間用空 格分開。變量如果是字符型的需要在變量名后面加格分開。變量如果是字符型的需要在變量名后面加 一個一個$ $符號,符與變量名可以直接相連也可以隔符號,符與變量名可以直接相連
3、也可以隔 一個空格。一個空格。例如:例如:使用自由格式的優(yōu)點是:使用簡使用自由格式的優(yōu)點是:使用簡 單;輸入數(shù)據(jù)時不必上下對齊;不需要知道每個變單;輸入數(shù)據(jù)時不必上下對齊;不需要知道每個變 量的具體列數(shù)而只需知道它的次序。量的具體列數(shù)而只需知道它的次序。 上一頁下一頁返回本節(jié)首頁 data sasuser.score1;data sasuser.score1; input name $ sex $ math chinese; input name $ sex $ math chinese; cards; cards; 李明李明 男男 92 9892 98 張紅藝張紅藝 女女 89 10689
4、106 王思明王思明 男男 86 9086 90 張聰張聰 男男 98 10998 109 劉潁劉潁 女女 80 11080 110 ; ; run;run; 上一頁下一頁返回本節(jié)首頁 使用這種格式需要注意以下幾點:使用這種格式需要注意以下幾點: 數(shù)據(jù)排列格式必須統(tǒng)一,數(shù)據(jù)排列格式必須統(tǒng)一, 每行數(shù)據(jù)代表一個觀測,每行數(shù)據(jù)代表一個觀測, 各數(shù)據(jù)值之間必須用空格或制表符分隔開;各數(shù)據(jù)值之間必須用空格或制表符分隔開; 缺失的數(shù)據(jù)用點號表示;缺失的數(shù)據(jù)用點號表示; 字符型數(shù)據(jù)的長度不能超過字符型數(shù)據(jù)的長度不能超過 8 8 個字符;個字符; 變量名與數(shù)據(jù)值要對應(yīng)。變量名與數(shù)據(jù)值要對應(yīng)。 使用這種辦法需
5、要在編輯窗口中輸入全部數(shù)據(jù)內(nèi)容,如使用這種辦法需要在編輯窗口中輸入全部數(shù)據(jù)內(nèi)容,如 果數(shù)據(jù)量不大的話還可以忍受,但是如果是海量數(shù)據(jù),那么果數(shù)據(jù)量不大的話還可以忍受,但是如果是海量數(shù)據(jù),那么 使用這種辦法幾乎是不可能了,這時就需要從其他文件來將使用這種辦法幾乎是不可能了,這時就需要從其他文件來將 數(shù)據(jù)導(dǎo)入數(shù)據(jù)集。數(shù)據(jù)導(dǎo)入數(shù)據(jù)集。 上一頁下一頁返回本節(jié)首頁 列方式列方式 此時需要在每個變量名(及此時需要在每個變量名(及$ $符)后面列出該變量在數(shù)據(jù)行符)后面列出該變量在數(shù)據(jù)行 中所占據(jù)的列起始位置與結(jié)束位置,比如上面的例子可以改寫中所占據(jù)的列起始位置與結(jié)束位置,比如上面的例子可以改寫 成。列方式有
6、如下特點:成。列方式有如下特點: 要求數(shù)據(jù)行各項上下對齊要求數(shù)據(jù)行各項上下對齊 各項之間可以沒有任何分隔,連續(xù)寫在一起各項之間可以沒有任何分隔,連續(xù)寫在一起 字符型數(shù)據(jù)長度可以超過字符型數(shù)據(jù)長度可以超過8 8個字符,中間可以有空格,頭尾的空個字符,中間可以有空格,頭尾的空 格仍將被忽略。格仍將被忽略。 不論字符型變量還是數(shù)值型變量如果指定列位置都是空白則輸不論字符型變量還是數(shù)值型變量如果指定列位置都是空白則輸 入值為缺失值。小數(shù)點仍表示數(shù)值型和字符型變量的缺失值。入值為缺失值。小數(shù)點仍表示數(shù)值型和字符型變量的缺失值。 可以只輸入數(shù)據(jù)行中的某些項而忽略其它項??梢灾惠斎霐?shù)據(jù)行中的某些項而忽略其它
7、項。 由于列方式不要求數(shù)據(jù)項之間分開,所以經(jīng)常用來輸入緊縮格由于列方式不要求數(shù)據(jù)項之間分開,所以經(jīng)常用來輸入緊縮格 式的數(shù)據(jù)。比如,我們要輸入一批身份證號碼,但只輸入其中式的數(shù)據(jù)。比如,我們要輸入一批身份證號碼,但只輸入其中 的出生年、月、日信息,就可以用如下程序:的出生年、月、日信息,就可以用如下程序: 上一頁下一頁返回本節(jié)首頁 data pids;data pids; input year 7-8 mon 9-10 day 11-12; input year 7-8 mon 9-10 day 11-12; cards; cards; 11231123 11051105 ; ; run;ru
8、n; 上一頁下一頁返回本節(jié)首頁 data sasuser.score3;data sasuser.score3; input name $ 1-10 sex $ 11-13 math 14-16 chinese 18-20; input name $ 1-10 sex $ 11-13 math 14-16 chinese 18-20; cards; cards; 李明李明 男男 92 9892 98 張紅藝張紅藝 女女 89 10689 106 王思明王思明 男男 86 9086 90 張聰張聰 男男 98 10998 109 劉潁劉潁 女女 80 11080 110 ; ; run;run;
9、 上一頁下一頁返回本節(jié)首頁 格式輸入格式輸入 有格式輸入就是在變量名后加格式名。其中最有格式輸入就是在變量名后加格式名。其中最 常見的是用來輸入日期。數(shù)據(jù)中的日期寫法經(jīng)常是常見的是用來輸入日期。數(shù)據(jù)中的日期寫法經(jīng)常是 多種多樣的,比如多種多樣的,比如19981998年年1010月月9 9日可以寫成日可以寫成“1998-1998- 10-9 10-9 ”,“”,“9/10/989/10/98”等等,為讀入這樣的日等等,為讀入這樣的日 期數(shù)據(jù)就需要為它指定特殊的日期輸入格式。另外,期數(shù)據(jù)就需要為它指定特殊的日期輸入格式。另外, 日期數(shù)據(jù)在日期數(shù)據(jù)在SASSAS中是按數(shù)值存儲的,所以如果要顯中是按數(shù)
10、值存儲的,所以如果要顯 示日期值,也需要為它指定特殊的日期輸出格式。示日期值,也需要為它指定特殊的日期輸出格式。 例如:例如: 上一頁下一頁返回本節(jié)首頁 data a;data a; input date yymmdd8. sales; input date yymmdd8. sales; format date yymmdd10.; format date yymmdd10.; cards; cards; 56-6-13 110056-6-13 1100 67.12.15 120067.12.15 1200 78 10 2 130078 10 2 1300 891001 1400891001
11、 1400 19960101 150019960101 1500 20020901 160020020901 1600 ; ; run;run; proc print;run;proc print;run; 上一頁下一頁返回本節(jié)首頁 yymmdd8.yymmdd8. 指明日期數(shù)據(jù)占據(jù)指明日期數(shù)據(jù)占據(jù)8 8列位置。因此在列位置。因此在cardscards中,中, 如果日期數(shù)據(jù)不滿如果日期數(shù)據(jù)不滿8 8列要用空格補(bǔ)充,不能讓后面的列要用空格補(bǔ)充,不能讓后面的 數(shù)據(jù)進(jìn)入這數(shù)據(jù)進(jìn)入這8 8列。這樣可以輸入沒有世紀(jì)數(shù),年、月、列。這樣可以輸入沒有世紀(jì)數(shù),年、月、 日之間用減號或小數(shù)點或空格分隔的日期,輸
12、入日之間用減號或小數(shù)點或空格分隔的日期,輸入 YYMMDD YYMMDD 格式的六位數(shù)的日期(一位數(shù)的月、日前面格式的六位數(shù)的日期(一位數(shù)的月、日前面 補(bǔ)補(bǔ)0 0),輸入帶世紀(jì)數(shù)的),輸入帶世紀(jì)數(shù)的YYYYMMDDYYYYMMDD格式的日期(一位格式的日期(一位 數(shù)的月、日前面補(bǔ)數(shù)的月、日前面補(bǔ)0 0)。)。 上一頁下一頁返回本節(jié)首頁 YYMMDD10.YYMMDD10. 輸入格式可以輸入帶世紀(jì)數(shù)的中間有分隔符或無分隔的日期,輸入格式可以輸入帶世紀(jì)數(shù)的中間有分隔符或無分隔的日期, 如:如: data b;data b; input date yymmdd10. sales; input dat
13、e yymmdd10. sales; format date yymmdd10.; format date yymmdd10.; cards; cards; 56-6-13 110056-6-13 1100 67.12.15 120078 10 2 130067.12.15 120078 10 2 1300 891001 1400891001 1400 19960101 150019960101 1500 ; ; run;run; proc print;run;proc print;run; FORMATFORMAT語句規(guī)定輸出日期變量時使用的顯示格式。結(jié)語句規(guī)定輸出日期變量時使用的顯示格式。
14、結(jié) 果為:果為: 1 1956-06-13 1100 1 1956-06-13 1100 2 1967-07-11 12002 1967-07-11 1200 3 1978-10-02 13003 1978-10-02 1300 4 1989-10-01 14004 1989-10-01 1400 5 1996-01-01 15005 1996-01-01 1500 6 2002-09-01 16006 2002-09-01 1600 上一頁下一頁返回本節(jié)首頁 infileinfile語句讀入數(shù)據(jù)語句讀入數(shù)據(jù) 使用程序中直接輸入數(shù)據(jù)的方法,需要在編輯窗口使用程序中直接輸入數(shù)據(jù)的方法,需要在編輯
15、窗口 中輸入全部數(shù)據(jù)內(nèi)容。如果數(shù)據(jù)量不大的話還可以忍受,中輸入全部數(shù)據(jù)內(nèi)容。如果數(shù)據(jù)量不大的話還可以忍受, 但是如果是海量數(shù)據(jù),那么使用這種辦法幾乎是不可能了,但是如果是海量數(shù)據(jù),那么使用這種辦法幾乎是不可能了, 這時就需要從其他文件來將數(shù)據(jù)導(dǎo)入數(shù)據(jù)集,使用這時就需要從其他文件來將數(shù)據(jù)導(dǎo)入數(shù)據(jù)集,使用 infile infile 命命 令來指定數(shù)據(jù)文件的位置。例如:令來指定數(shù)據(jù)文件的位置。例如: data sasuser.score2; sasuser.score2; infile f:score.txt;infile f:score.txt; input name $ sex $ math
16、chinese;input name $ sex $ math chinese; run; ; 上一頁下一頁返回本節(jié)首頁 (二)利用(二)利用 VIEWTABLE VIEWTABLE 新建數(shù)據(jù)集新建數(shù)據(jù)集 除了編輯程序創(chuàng)建數(shù)據(jù)集以外,還有很多種除了編輯程序創(chuàng)建數(shù)據(jù)集以外,還有很多種 不需要編程的方法,例如可以直接使用不需要編程的方法,例如可以直接使用VIEWTABLE VIEWTABLE 方式,方式,VIEWTABLE VIEWTABLE 是是 SAS SAS 系統(tǒng)中一種通過可視的系統(tǒng)中一種通過可視的 方式管理數(shù)據(jù)的工具。方式管理數(shù)據(jù)的工具。 上一頁下一頁返回本節(jié)首頁 (三)將其他格式的數(shù)據(jù)文
17、件導(dǎo)入數(shù)據(jù)集(三)將其他格式的數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)集 SAS SAS系統(tǒng)提供了將系統(tǒng)提供了將SASSAS數(shù)據(jù)集與標(biāo)準(zhǔn)格式文件和數(shù)據(jù)集與標(biāo)準(zhǔn)格式文件和 用戶自定義格式文件之間的互相轉(zhuǎn)換功能。用戶自定義格式文件之間的互相轉(zhuǎn)換功能。 SAS SAS 的導(dǎo)入向?qū)Э梢詭椭覀兺瓿蛇@項工作的導(dǎo)入向?qū)Э梢詭椭覀兺瓿蛇@項工作 。SAS SAS 系系 統(tǒng)可以轉(zhuǎn)換的標(biāo)準(zhǔn)格式的數(shù)據(jù)文件包括統(tǒng)可以轉(zhuǎn)換的標(biāo)準(zhǔn)格式的數(shù)據(jù)文件包括 XLS,WK1,TXTXLS,WK1,TXT等。等。 上一頁下一頁返回本節(jié)首頁 二、二、SASSAS數(shù)據(jù)集的瀏覽與修改數(shù)據(jù)集的瀏覽與修改 (一)利用(一)利用viewtableviewtable方
18、式方式 (二)(二)SAS INSIGHT SAS INSIGHT 方式方式 上一頁下一頁返回本節(jié)首頁 三、三、SASSAS數(shù)據(jù)集的高級管理數(shù)據(jù)集的高級管理 ( (一一) SAS) SAS數(shù)據(jù)步的運(yùn)行機(jī)制數(shù)據(jù)步的運(yùn)行機(jī)制 ( (二二) )數(shù)據(jù)集的復(fù)制與修改數(shù)據(jù)集的復(fù)制與修改 ( (三三) ) 拆分?jǐn)?shù)據(jù)集拆分?jǐn)?shù)據(jù)集 ( (四四) )數(shù)據(jù)集的縱向合并數(shù)據(jù)集的縱向合并 ( (五五) )數(shù)據(jù)集的橫向合并數(shù)據(jù)集的橫向合并 ( (六六) )數(shù)據(jù)集的更新數(shù)據(jù)集的更新 上一頁下一頁返回本節(jié)首頁 (一)(一)SASSAS數(shù)據(jù)步的運(yùn)行機(jī)制數(shù)據(jù)步的運(yùn)行機(jī)制 SAS SAS語言的編程計算功能主要在數(shù)據(jù)步實現(xiàn),語言的編
19、程計算功能主要在數(shù)據(jù)步實現(xiàn), 一個一個SASSAS數(shù)據(jù)步相當(dāng)于一個單獨運(yùn)行的程序。但是,數(shù)據(jù)步相當(dāng)于一個單獨運(yùn)行的程序。但是, SASSAS語言又是一個專用數(shù)據(jù)處理語言,所以語言又是一個專用數(shù)據(jù)處理語言,所以SASSAS數(shù)據(jù)數(shù)據(jù) 步有其它語言所沒有的特點。請看例子步有其它語言所沒有的特點。請看例子: : 上一頁下一頁返回本節(jié)首頁 data a;data a; put x= y= z=; put x= y= z=; input x y; input x y; z=x+y; z=x+y; put x= y= z=; put x= y= z=; cards; cards; 10 2010 20 10
20、0 200100 200 ; ; run;run; 運(yùn)行后在運(yùn)行后在LOGLOG窗口顯示如下記錄:窗口顯示如下記錄: X=. Y=. Z=.X=. Y=. Z=. X=10 Y=20 Z=30X=10 Y=20 Z=30 X=. Y=. Z=.X=. Y=. Z=. X=100 Y=200 Z=300X=100 Y=200 Z=300 X=. Y=. Z=.X=. Y=. Z=. NOTE: The data set WORK.A has 2 NOTE: The data set WORK.A has 2 observations and 3 variables.observations an
21、d 3 variables. 上一頁下一頁返回本節(jié)首頁 從這個例子可以看出從這個例子可以看出SASSAS數(shù)據(jù)步程序和普通程序的一個重數(shù)據(jù)步程序和普通程序的一個重 大區(qū)別:大區(qū)別: SASSAS數(shù)據(jù)步如果有數(shù)據(jù)輸入,比如用數(shù)據(jù)步如果有數(shù)據(jù)輸入,比如用INPUTINPUT、SETSET、MERGEMERGE、 UPDATEUPDATE、MODIFYMODIFY等語句讀入數(shù)據(jù),則數(shù)據(jù)步中隱含了一個循環(huán),等語句讀入數(shù)據(jù),則數(shù)據(jù)步中隱含了一個循環(huán), 即數(shù)據(jù)步程序執(zhí)行到最后一個語句后,會返回到數(shù)據(jù)步內(nèi)的第即數(shù)據(jù)步程序執(zhí)行到最后一個語句后,會返回到數(shù)據(jù)步內(nèi)的第 一個可執(zhí)行語句開始繼續(xù)執(zhí)行,直到讀入數(shù)據(jù)語句(
22、一個可執(zhí)行語句開始繼續(xù)執(zhí)行,直到讀入數(shù)據(jù)語句(INPUTINPUT、 SETSET、MERGEMERGE、UPDATEUPDATE、MODIFYMODIFY等)讀入了數(shù)據(jù)結(jié)束標(biāo)志為止才等)讀入了數(shù)據(jù)結(jié)束標(biāo)志為止才 停止執(zhí)行數(shù)據(jù)步,并把讀入的各個觀測寫入在停止執(zhí)行數(shù)據(jù)步,并把讀入的各個觀測寫入在DATADATA語句中指定語句中指定 的數(shù)據(jù)集。如果沒有數(shù)據(jù)輸入而只是直接計算,則數(shù)據(jù)步程序的數(shù)據(jù)集。如果沒有數(shù)據(jù)輸入而只是直接計算,則數(shù)據(jù)步程序 沒有此隱含循環(huán)。數(shù)據(jù)步因為有這樣一個隱含循環(huán),所以也提沒有此隱含循環(huán)。數(shù)據(jù)步因為有這樣一個隱含循環(huán),所以也提 供了用來查詢某一步是第幾次循環(huán)的特殊變量供了用來
23、查詢某一步是第幾次循環(huán)的特殊變量 _N_N_,它的值為,它的值為 數(shù)據(jù)步循環(huán)計數(shù)值。數(shù)據(jù)步循環(huán)計數(shù)值。 SAS數(shù)據(jù)步流程圖 ( (二二) )數(shù)據(jù)集的復(fù)制與修改數(shù)據(jù)集的復(fù)制與修改 用用SETSET語句把一個已有數(shù)據(jù)集復(fù)制到一個新數(shù)據(jù)集,同時還語句把一個已有數(shù)據(jù)集復(fù)制到一個新數(shù)據(jù)集,同時還 可以進(jìn)行修改。比如要把數(shù)據(jù)集可以進(jìn)行修改。比如要把數(shù)據(jù)集work.scorework.score復(fù)制為數(shù)據(jù)集復(fù)制為數(shù)據(jù)集 sasuser.score1sasuser.score1,只要用如下程序:,只要用如下程序: data sasuser.score1;data sasuser.score1; set sco
24、re; set score; run;run; 這樣的程序流程中也有一個隱含循環(huán),程序在數(shù)據(jù)步內(nèi)反這樣的程序流程中也有一個隱含循環(huán),程序在數(shù)據(jù)步內(nèi)反 復(fù)循環(huán),直到輸入數(shù)據(jù)集復(fù)循環(huán),直到輸入數(shù)據(jù)集score score 最后一個觀測讀過。最后一個觀測讀過。 上一頁下一頁返回本節(jié)首頁 我們還可以用我們還可以用SASSAS程序語句對生成的數(shù)據(jù)集進(jìn)程序語句對生成的數(shù)據(jù)集進(jìn) 行修改。比如,我們把超過行修改。比如,我們把超過100100分的語文成績都改分的語文成績都改 為為100100分,就可以用如下程序:分,就可以用如下程序: data scorea;data scorea; set score; se
25、t score; if chinese100 then chinese=100; if chinese100 then chinese=100; run;run; KEEPKEEP與與DROPDROP語句語句 KEEPKEEP語句用來保留指定的變量,如:語句用來保留指定的變量,如: data scoreb;data scoreb; set score; set score; keep name sex; keep name sex; run;run; 生成的數(shù)據(jù)集生成的數(shù)據(jù)集scorebscoreb只包含只包含NAMENAME和和SEXSEX兩個變量。兩個變量。 DROPDROP語句用來指定要
26、丟棄的變量,如:語句用來指定要丟棄的變量,如: data scoreb;data scoreb; set score; set score; drop name sex; drop name sex; run;run; 生成的數(shù)據(jù)集不包含生成的數(shù)據(jù)集不包含namename和和sexsex二個變量的值二個變量的值 子集子集IFIF語句語句 可以通過可以通過“子集子集ifif”語句指定一個條件取出數(shù)據(jù)集的語句指定一個條件取出數(shù)據(jù)集的 某些行組成的子集。某些行組成的子集。 data scorec;data scorec; set score; set score; IF math=90 and ch
27、inese=100; IF math=90 and chinese=100; run;run; 注意:子集注意:子集IFIF語句不同于我們前面所講的分支語句,它沒有語句不同于我們前面所講的分支語句,它沒有 THENTHEN部分,只有條件,用于取出滿足條件的行子集。部分,只有條件,用于取出滿足條件的行子集。 上一頁下一頁返回本節(jié)首頁 ( (三三) ) 拆分?jǐn)?shù)據(jù)集拆分?jǐn)?shù)據(jù)集 有時我們需要根據(jù)某一分類原則把數(shù)據(jù)行分別有時我們需要根據(jù)某一分類原則把數(shù)據(jù)行分別 存放到不同的數(shù)據(jù)集。比如,我們希望把數(shù)據(jù)集存放到不同的數(shù)據(jù)集。比如,我們希望把數(shù)據(jù)集 scorescore中的所有男生的記錄放到數(shù)據(jù)集中的所有男
28、生的記錄放到數(shù)據(jù)集scoremscorem中,中, 把所有女生的記錄放到把所有女生的記錄放到scorefscoref中,可以使用如下程中,可以使用如下程 序:序: 上一頁下一頁返回本節(jié)首頁 data scorem scoref;data scorem scoref; set score; set score; select(sex); select(sex); when( when(男男) output scorem;) output scorem; when( when(女女) output scoref;) output scoref; otherwise put sex= otherwi
29、se put sex= 有錯有錯; end; end; drop sex; drop sex; run;run; proc print data=scorem;run;proc print data=scorem;run; proc print data=scoref;run;proc print data=scoref;run; 注意:在注意:在DATADATA語句中,我們指定了兩個數(shù)據(jù)集語句中,我們指定了兩個數(shù)據(jù)集 名,這表示要生成兩個數(shù)據(jù)集。程序中用名,這表示要生成兩個數(shù)據(jù)集。程序中用SETSET語句語句 引入了一個數(shù)據(jù)集,這個數(shù)據(jù)集的觀測如何分配到引入了一個數(shù)據(jù)集,這個數(shù)據(jù)集的觀測如何
30、分配到 兩個結(jié)果數(shù)據(jù)集中呢?關(guān)鍵在于兩個結(jié)果數(shù)據(jù)集中呢?關(guān)鍵在于OUTPUTOUTPUT語句。語句。 OUTPUTOUTPUT語句是一個可執(zhí)行語句,它使得當(dāng)前觀測被語句是一個可執(zhí)行語句,它使得當(dāng)前觀測被 寫到語句指定的數(shù)據(jù)集中。這樣,我們根據(jù)寫到語句指定的數(shù)據(jù)集中。這樣,我們根據(jù)SELECTSELECT 的結(jié)果把不同性別分別放到了兩個不同數(shù)據(jù)集中。的結(jié)果把不同性別分別放到了兩個不同數(shù)據(jù)集中。 OUTPUT OUTPUT語句還可以用來強(qiáng)行寫入數(shù)據(jù)集而不必象語句還可以用來強(qiáng)行寫入數(shù)據(jù)集而不必象 我們在數(shù)據(jù)步流程圖中說明的那樣等到數(shù)據(jù)步最后一我們在數(shù)據(jù)步流程圖中說明的那樣等到數(shù)據(jù)步最后一 個語句完成
31、。數(shù)據(jù)步中有了個語句完成。數(shù)據(jù)步中有了OUTPUTOUTPUT語句后數(shù)據(jù)步流程語句后數(shù)據(jù)步流程 中不再有自動寫入觀測的操作,而只能由中不再有自動寫入觀測的操作,而只能由OUTPUTOUTPUT語句語句 指定輸出。不指定數(shù)據(jù)集名的指定輸出。不指定數(shù)據(jù)集名的OUTPUTOUTPUT語句輸出到第一語句輸出到第一 個結(jié)果數(shù)據(jù)集。比如下面的程序生成一個包含個結(jié)果數(shù)據(jù)集。比如下面的程序生成一個包含1 1到到1010 的及其平方的有的及其平方的有1010個觀測的數(shù)據(jù)集:個觀測的數(shù)據(jù)集: data test;data test; do i=1 to 10; do i=1 to 10; j=i j=i* *i;
32、i; output; output; end; end; run;run; proc print;run;proc print;run; 如果刪去上面的如果刪去上面的OUTPUTOUTPUT語句則結(jié)果數(shù)據(jù)集中語句則結(jié)果數(shù)據(jù)集中 只有只有i=11i=11,j=100j=100的一個觀測。的一個觀測。 上一頁下一頁返回本節(jié)首頁 (四)數(shù)據(jù)集的縱向合并(四)數(shù)據(jù)集的縱向合并 幾個結(jié)構(gòu)相同的數(shù)據(jù)集可以上下地連接到一起。比如,幾個結(jié)構(gòu)相同的數(shù)據(jù)集可以上下地連接到一起。比如, 我們有四個班的學(xué)生情況的數(shù)據(jù)集我們有四個班的學(xué)生情況的數(shù)據(jù)集Class1-Class4Class1-Class4,每個數(shù),每個數(shù)
33、據(jù)集包含一個班學(xué)生的學(xué)號、姓名、性別信息,我們希望把據(jù)集包含一個班學(xué)生的學(xué)號、姓名、性別信息,我們希望把 這些數(shù)據(jù)集合并為一個大數(shù)據(jù)集,可以用如下代碼:這些數(shù)據(jù)集合并為一個大數(shù)據(jù)集,可以用如下代碼: data classes;data classes; set class1 class2 class3 class4; set class1 class2 class3 class4; run;run; 可見,要把若干個結(jié)構(gòu)相同的數(shù)據(jù)集合并為一個數(shù)據(jù)集,只可見,要把若干個結(jié)構(gòu)相同的數(shù)據(jù)集合并為一個數(shù)據(jù)集,只 要在要在DATADATA語句中指定要生成的大數(shù)據(jù)集的名字,然后在數(shù)據(jù)語句中指定要生成的大數(shù)
34、據(jù)集的名字,然后在數(shù)據(jù) 步中使用步中使用SETSET語句并在語句并在SETSET語句中依次列出各小數(shù)據(jù)集。語句中依次列出各小數(shù)據(jù)集。 上一頁下一頁返回本節(jié)首頁 有時我們需要在合并數(shù)據(jù)集時加入一個變量來指示每一個觀測原來來自哪有時我們需要在合并數(shù)據(jù)集時加入一個變量來指示每一個觀測原來來自哪 一個小數(shù)據(jù)集,這可以在一個小數(shù)據(jù)集,這可以在SETSET語句的每一個數(shù)據(jù)集名后面加一個括號,里面寫上語句的每一個數(shù)據(jù)集名后面加一個括號,里面寫上 in=in=變量名,變量名所給的變量取變量名,變量名所給的變量取1 1表示觀測來自此數(shù)據(jù)集,取表示觀測來自此數(shù)據(jù)集,取0 0表示觀測非來自表示觀測非來自 此數(shù)據(jù)集。
35、例如,在前面的例子中我們把此數(shù)據(jù)集。例如,在前面的例子中我們把score score 數(shù)據(jù)集按男、女拆分成了數(shù)據(jù)集按男、女拆分成了 scoremscorem和和scorefscoref兩個數(shù)據(jù)集并拋棄了性別變量,就可以用如下程序連接兩個數(shù)兩個數(shù)據(jù)集并拋棄了性別變量,就可以用如下程序連接兩個數(shù) 據(jù)集并恢復(fù)性別信息:據(jù)集并恢復(fù)性別信息: data new;data new; set scorem(in=male) scoref(in=female); set scorem(in=male) scoref(in=female); if male=1 then sex= if male=1 then
36、sex=男男; if female=1 then sex= if female=1 then sex=女女; run;run; 在數(shù)據(jù)步中,如果觀測來自在數(shù)據(jù)步中,如果觀測來自scoremscorem,則變量,則變量malemale值為值為1 1,如果觀測來自,如果觀測來自 scorefscoref則變量則變量female female 值為值為1 1,可以使用這兩個變量的值定義新變量,可以使用這兩個變量的值定義新變量sexsex。用數(shù)據(jù)。用數(shù)據(jù) 集選項的集選項的in=in=指定的變量不能直接進(jìn)入結(jié)果數(shù)據(jù)集而只能用于數(shù)據(jù)步程序中。指定的變量不能直接進(jìn)入結(jié)果數(shù)據(jù)集而只能用于數(shù)據(jù)步程序中。 上一頁
37、下一頁返回本節(jié)首頁 ( (五五) )數(shù)據(jù)集的橫向合并數(shù)據(jù)集的橫向合并 兩個(或多個)數(shù)據(jù)集如果包含了同樣的一些觀測兩個(或多個)數(shù)據(jù)集如果包含了同樣的一些觀測 的不同屬性(變量),比如,數(shù)據(jù)集的不同屬性(變量),比如,數(shù)據(jù)集scorexsscorexs包含學(xué)生的包含學(xué)生的 姓名、性別,數(shù)據(jù)集姓名、性別,數(shù)據(jù)集scoresxscoresx包含學(xué)生的數(shù)學(xué)成績,數(shù)據(jù)包含學(xué)生的數(shù)學(xué)成績,數(shù)據(jù) 集集scoreywscoreyw包含學(xué)生的語文成績,數(shù)據(jù)集包含學(xué)生的語文成績,數(shù)據(jù)集scoreyyscoreyy包含學(xué)包含學(xué) 生的英語成績且各數(shù)據(jù)集的觀測是按順序一一對應(yīng)的,生的英語成績且各數(shù)據(jù)集的觀測是按順序一
38、一對應(yīng)的, 就可以用如下帶有就可以用如下帶有MERGEMERGE語句的數(shù)據(jù)步把它們左右橫向合語句的數(shù)據(jù)步把它們左右橫向合 并到一個數(shù)據(jù)集并到一個數(shù)據(jù)集NEWNEW: data new;data new; merge scorexs scoreyw scoresx; merge scorexs scoreyw scoresx; run;run; 上一頁下一頁返回本節(jié)首頁 橫向合并一般應(yīng)該采用按關(guān)鍵字合并的辦法,橫向合并一般應(yīng)該采用按關(guān)鍵字合并的辦法, 即先把每個數(shù)據(jù)集按照相同的、能唯一區(qū)分各觀即先把每個數(shù)據(jù)集按照相同的、能唯一區(qū)分各觀 測的一個(或幾個)變量排序,然后用測的一個(或幾個)變量排序
39、,然后用BYBY語句和語句和 MERGEMERGE語句聯(lián)合使用,這樣即使原來觀測順序不一語句聯(lián)合使用,這樣即使原來觀測順序不一 致也可以保證橫向合并的結(jié)果沒有錯。下例先把致也可以保證橫向合并的結(jié)果沒有錯。下例先把 scorescore數(shù)據(jù)集橫向拆分為包含姓名、性別的數(shù)據(jù)集數(shù)據(jù)集橫向拆分為包含姓名、性別的數(shù)據(jù)集 scorexsscorexs和包含姓名、數(shù)學(xué)成績、語文成績和英語和包含姓名、數(shù)學(xué)成績、語文成績和英語 成績的數(shù)據(jù)集成績的數(shù)據(jù)集scoresyy scoresyy ,然后按關(guān)鍵字橫向合并:,然后按關(guān)鍵字橫向合并: 上一頁下一頁返回本節(jié)首頁 data scorexs;data scorexs
40、; set score; set score; keep name sex; keep name sex; run;run; data scoresyy;data scoresyy; set score; set score; keep name math chinese english; keep name math chinese english; run;run; proc sort data=scorexs;proc sort data=scorexs; by name; by name; run;run; proc sort data=scoresyy;proc sort data=
41、scoresyy; by name; by name; run;run; data new;data new; merge scorexs scoresyy; merge scorexs scoresyy; by name; by name; run;run; proc print;run;proc print;run; 上一頁下一頁返回本節(jié)首頁 ( (六六) )用用UPDATEUPDATE語句更新數(shù)據(jù)集語句更新數(shù)據(jù)集 如果我們發(fā)現(xiàn)數(shù)據(jù)集中的某些數(shù)據(jù)值有錯誤或者現(xiàn)在如果我們發(fā)現(xiàn)數(shù)據(jù)集中的某些數(shù)據(jù)值有錯誤或者現(xiàn)在 的值已經(jīng)改變了,我們可以從更正了的原始數(shù)據(jù)重新生成的值已經(jīng)改變了,我們可以從更正了
42、的原始數(shù)據(jù)重新生成 數(shù)據(jù)集,或者使用更有效的方法,即建立一個只包含新數(shù)數(shù)據(jù)集,或者使用更有效的方法,即建立一個只包含新數(shù) 據(jù)值的數(shù)據(jù)集,用此數(shù)據(jù)集修改原數(shù)據(jù)集。使用如下的據(jù)值的數(shù)據(jù)集,用此數(shù)據(jù)集修改原數(shù)據(jù)集。使用如下的 DATADATA步中可以實現(xiàn)數(shù)據(jù)集的更新:步中可以實現(xiàn)數(shù)據(jù)集的更新: DATA DATA 新數(shù)據(jù)集名新數(shù)據(jù)集名; ; UPDATE UPDATE 原數(shù)據(jù)集原數(shù)據(jù)集 更新用數(shù)據(jù)集更新用數(shù)據(jù)集; ; BY BY 關(guān)鍵變量關(guān)鍵變量; ; RUN;RUN; 上一頁下一頁返回本節(jié)首頁 例如,比如我們發(fā)現(xiàn)數(shù)據(jù)集例如,比如我們發(fā)現(xiàn)數(shù)據(jù)集scorescore中王思明的語文成績中王思明的語文成績
43、 實際應(yīng)該是實際應(yīng)該是9191分,張紅藝性別應(yīng)為男,可以先生成如下的分,張紅藝性別應(yīng)為男,可以先生成如下的 只包含更正數(shù)據(jù)值的數(shù)據(jù)集,不需要改的觀測不列入,不只包含更正數(shù)據(jù)值的數(shù)據(jù)集,不需要改的觀測不列入,不 需要改的變量不列入或取缺失值:需要改的變量不列入或取缺失值: data upd;data upd; input name $ sex $ english; input name $ sex $ english; cards; cards; 王思明王思明 男男 . . 張紅藝張紅藝 . 110. 110 ; ; run;run; 然后,把原數(shù)據(jù)集然后,把原數(shù)據(jù)集scorescore和更新用數(shù)據(jù)集和更新用數(shù)據(jù)集UPDUPD均按姓名均按姓名 (NAMENAME)排序:)排序: proc sort data=score;proc sort data=score; by name; by name; run;run; proc sort data=upd;proc sort data=upd; by name; by name; run;run; 最后用最后用UPDATEUPDATE和和BYBY更新得到新數(shù)據(jù)集更新得到新數(shù)據(jù)集NEWNEW,其中王思明的,其中王思明的 性別改成了男,張紅藝英語成績改成了性別改成了男,張紅藝英語成績改成了110110分。分。 data ne
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 在線教育平臺內(nèi)容制作手冊
- 房屋買賣合同居間協(xié)議
- 工程管理質(zhì)量與安全控制手冊
- 家具廠廠長聘任書合同
- 地皮交易居間協(xié)議合同
- 2025年綿陽貨運(yùn)從業(yè)資格證考試題庫
- 《數(shù)據(jù)可視化技術(shù)應(yīng)用》3.3 構(gòu)建銷售數(shù)據(jù)動態(tài)分析看板-教案
- 員工上下班安全協(xié)議書5篇
- 廠房消防勞務(wù)承包合同范例
- 淮北房產(chǎn)合同范本
- 2025年湖南環(huán)境生物職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫一套
- 2025年黑龍江農(nóng)業(yè)經(jīng)濟(jì)職業(yè)學(xué)院單招職業(yè)傾向性測試題庫參考答案
- 新版統(tǒng)編版一年級道德與法治下冊全冊教案(完整版)教學(xué)設(shè)計含教學(xué)反思
- 2025年春季學(xué)期學(xué)校德育工作計劃安排表(完整版)
- 二手人防車位使用權(quán)轉(zhuǎn)讓協(xié)議書
- 新版醫(yī)療機(jī)構(gòu)消毒技術(shù)規(guī)范
- 報價單(報價單模板)
- 軟件概要設(shè)計說明書范例(共21頁)
- 境外公共安全管理.ppt
- 貴人登天門吉時速查表(精編版)
- 小組成員職責(zé)分工
評論
0/150
提交評論