SAS編程技術(shù)變量輸入輸出格式.ppt_第1頁
SAS編程技術(shù)變量輸入輸出格式.ppt_第2頁
SAS編程技術(shù)變量輸入輸出格式.ppt_第3頁
SAS編程技術(shù)變量輸入輸出格式.ppt_第4頁
SAS編程技術(shù)變量輸入輸出格式.ppt_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余87頁可下載查看

下載本文檔

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

文檔簡介

1、第13章 變量輸入輸出格式,清華大學(xué)經(jīng)管學(xué)院 朱世武 Z Resdat樣本數(shù)據(jù): SAS論壇: ,本章內(nèi)容包括:,輸入格式; 輸出格式; SAS日期時(shí)間存貯方式; 日期時(shí)間輸入格式; 日期時(shí)間輸出格式; 缺失值處理。,輸入格式,輸入格式是SAS系統(tǒng)用來讀入數(shù)據(jù)值的一個(gè)指令。 輸入格式形式 INFORMAT . 選項(xiàng)說明: 通用規(guī)則: 所有輸入格式必須包含一個(gè)點(diǎn)(.)作為名字的一部分; 對(duì)于省略W和D值的輸入格式,使用系統(tǒng)缺省值。,輸入格式使用方法,INPUT語句; INPUT函數(shù); DATA步中用INFORMAT或ATTRIB語句; PROC步中用INFORMAT或ATTRIB語句。,INPU

2、T語句,例13.1 列格式輸入。 input 6 date ddmmyy10. +1 stocd $ 8. oppr 8.2; 例中,從第6列開始以DDMMYY10.格式讀入變量DATE, 第7列開始以長度為8的字符格式讀入變量STOCD,然后以數(shù)值格式8.2讀入變量OPPR。,INPUT函數(shù),例13.2 字符轉(zhuǎn)換數(shù)值。 data; x=98.6; y=input(x, 4.); put x= y=; run; 例中,INPUT函數(shù)和w.d輸入格式將X的字符值轉(zhuǎn)換為一個(gè)數(shù)值Y. INPUT函數(shù)對(duì)于數(shù)據(jù)的轉(zhuǎn)換是很有用的,當(dāng)然,有更簡單的方法將字符值轉(zhuǎn)換為數(shù)值。 data; x=98.6; y=x

3、-0; put x= y=; run;,例13.3 數(shù)值轉(zhuǎn)換為字符時(shí)會(huì)產(chǎn)生不正確結(jié)果。 data; x=2557898; y=input(x,$8.); put y; run; 例中,產(chǎn)生的結(jié)果為255, 不正確。,例13.4 PUT函數(shù)將數(shù)值轉(zhuǎn)換為字符。 data; x=2557898; y=put(x, $8.); put y; run; 例中,用PUT函數(shù)得到正確結(jié)果,即字符型2557898. data; x=2557898; y=put(x, $3.); put y; run; 例中,Y的結(jié)果為3E6.,在DATA步中用INFORMAT語句或ATTRIB語句,例13.5 DATA步中用

4、INFORMAT語句。 data a; input x; informat x comma12.4; cards; 12,345.1234 22,345.1234 ; run; 例中,最好就是只用INFORMAT語句,不要用ATTRIB,這樣可以少記些東西。,永久性與臨時(shí)性聯(lián)系,DATA步規(guī)定的輸入格式是永久聯(lián)系的; PROC步規(guī)定的輸入格式是臨時(shí)聯(lián)系的。,輸入格式類型,數(shù)值輸入格式; 字符輸入格式; 日期時(shí)間輸入格式; 豎式二進(jìn)制數(shù)輸入格式; 使用FORMAT過程自定義的輸入格式。,w.d輸入格式,讀入標(biāo)準(zhǔn)數(shù)值數(shù)據(jù)。 例13.6 INPUT語句對(duì)變量使用列指針控制和w.d的輸入格式。 INP

5、UT X 8.2; INPUT X 1-10 .2; W.D輸入格式把一個(gè)點(diǎn)(.)作為缺失值。 用W.D輸入格式時(shí),數(shù)值域尾部的空白不表示0,用BZ.輸入格式可以把尾部空白讀為0.,數(shù)值變量輸入格式,COMMAw.d 輸入格式,COMMAw.d輸入格式讀入包含字符的數(shù)值。 數(shù)值數(shù)據(jù)內(nèi)可能包含的字符有: 逗號(hào); 空格; $; %; 破折號(hào); 圓括號(hào)等。 例13.8 讀入帶千分號(hào)的數(shù)據(jù)。 data a; input x comma12.2; cards; 12,522.2315 ; run;,例13.10 數(shù)值變量輸入格式應(yīng)用舉例。 data ; informat x 8.2; x=12345.1

6、234; put x=; run; data a; x=12345.1234; informat x 12.4; format x 8.2; put x=; run; data a; input x; informat x comma12.4; cards; 12,345.1234 22,345.1234 ; run;,結(jié)果顯示x=12345.1234. 結(jié)果顯示x=12345.12.,$w.輸入格式,讀入標(biāo)準(zhǔn)字符數(shù)據(jù)。 在讀入字符值之前,$w.輸入格式清除字符值開頭的空格。 $w.輸入格式把一個(gè)點(diǎn)(.)轉(zhuǎn)換為空格,因?yàn)樗岩粋€(gè)點(diǎn)看作缺失值。 例13.11 讀入數(shù)據(jù)時(shí),清除數(shù)據(jù)開頭空格并將(.

7、)轉(zhuǎn)換為缺失值。 data; input name $5.; cards; xyz . uvw ; options nocenter; proc print noobs; run;,輸出結(jié)果: xyz uvw,字符變量輸入格式,$CHARw輸入格式,讀含有空格的字符數(shù)據(jù)。$CHARw.輸入格式除了不清除字符值開頭的空作格外,它等同于標(biāo)準(zhǔn)的$w.輸入格式。 例13.12 保留開頭和結(jié)尾的空格。 data; input name $char10.; cards; xyz . uvw ; options nocenter; proc print noobs; run; INPUT語句采取自由格式輸入

8、時(shí),INFORMAT或ATTRIB語句中不能使用$CHAR.輸入格式,因?yàn)镾AS把空格看作數(shù)據(jù)行中數(shù)值間的分隔符。,輸出結(jié)果: xyz . uvw,例13.13 不能放放在一起使用的語句。 informat x $char12.; input x y z; 例13.14直接賦值為字符型變量。 data a; x1=st92; x2=st92; informat x $8. ; x3=12,345.1234; run;,輸出格式,輸出格式是SAS系統(tǒng)用來輸出數(shù)據(jù)值的一個(gè)指令。 輸出格式形式 FORMAT . 選項(xiàng)說明:,通用規(guī)則: 所有輸出格式必須包含一個(gè)點(diǎn)(.)作為名字的一部分; 省略W和D的

9、值時(shí),使用系統(tǒng)的缺省值; 無論怎樣規(guī)定輸出格式中的小數(shù)位,輸出格式都不會(huì)影響存貯的數(shù)據(jù)值; 規(guī)定的輸出格式寬度太窄小時(shí),對(duì)字符格式截去右邊的字符,對(duì)數(shù)值格式轉(zhuǎn)換為BESTw.的格式; 使用一個(gè)不協(xié)調(diào)的輸出格式時(shí),SAS系統(tǒng)首先試著使用其它類型的類似格式。如果行不通,將輸出一個(gè)錯(cuò)誤信息在SAS日志。,輸出格式使用方法,PUT語句; PUT函數(shù); DATA步中用FORMAT或ATTRIB語句; PROC步中用FORMAT或ATTRIB語句。,PUT語句,例13.15 PUT語句中使用輸出格式。 data; x=1145.32; put x dollar10.2; run; 結(jié)果為$1,145.32

10、。輸出格式帶千分號(hào)和美元號(hào)。,PUT函數(shù),PUT函數(shù)對(duì)于將數(shù)值轉(zhuǎn)換為字符,或者改變變量的字符輸出格式是很有用的。 例13.16 PUT函數(shù)中使用輸入格式。 data; cc=16; cchex=put(cc,hex3.); put cc hex3.; run; 結(jié)果為010. 例中,轉(zhuǎn)換數(shù)值變量cc的值為三個(gè)字符的十六進(jìn)制表達(dá)式。 data; cc=16; cc=put(cc,3.); run; 例中,將數(shù)值CC轉(zhuǎn)換為字符值。,DATA步中用FORMAT或ATTRIB語句,例13.17 DATA步中用FORMAT或ATTRIB語句。 format sales1-sales12 comma10.

11、2; 例中,F(xiàn)ORMAT語句對(duì)變量sales1至sales12規(guī)定輸出格式COMMAw.d. attrib sales1-sales12 format=comma10.2;例中,ATTRIB語句對(duì)變量sales1至sales12規(guī)定輸出格式COMMAw.d.,輸出格式類型,數(shù)值輸出格式; 字符輸出格式; 日期時(shí)間輸出格式; 使用FORMAT過程創(chuàng)建的自定義輸出格式。,w.d輸出格式,輸出標(biāo)準(zhǔn)數(shù)值數(shù)據(jù)。對(duì)超出輸出格式寬度的數(shù)值進(jìn)行四舍五入。數(shù)值過大時(shí),使用BESTw.輸出。 例13.18 w.d輸出格式應(yīng)用。 data a; x=23.45; put x 6.3; run; 結(jié)果是23.450。

12、 例13.19 使用列輸出法等價(jià)于使用指針控制和w.d的格式。 put x 1-8 .2; put 1 x 8.2; 例中,兩個(gè)語句等價(jià)。,數(shù)值變量輸出格式,BESTw.格式,沒有對(duì)變量規(guī)定輸出格式時(shí),使用BEST.的格式。SAS在規(guī)定的寬度列數(shù)中選擇能夠給出該值最多信息的表示法作為輸出格式。SAS仍存貯原來的完整數(shù)值。,例13.20 用不同的BESTw.形式輸出時(shí),顯示結(jié)果不一樣,但在SAS存貯的都是原來的完整數(shù)值。 data; x=12570000; put 10 x best6.; run; 輸出值為1.26E6。正確地輸出這個(gè)值需要8列,使用E表示法把這個(gè)值壓縮為6列. data; x

13、=12570000; put 10 x best3.; run; 輸出值為1E6. data; x=12570000; put 10 x best2.; run; 輸出值為*.,Ew.輸出格式,例13.22 用科學(xué)記數(shù)法表示輸出數(shù)值。 data; x=1257; put 10 x e10.; run; 輸出值為1.257E+03,共占9列。,輸入輸出控制流程,輸入-存儲(chǔ)-輸出控制流程,$w.輸出格式,$w.是最常用的字符數(shù)據(jù)輸出格,w值給出輸出字符值的列數(shù)。 例13.24 $w.和列輸出格式產(chǎn)生同樣效果。 data ; name=ABC; put 10 name $3.; put name $

14、10-12; run; 例中,都輸出值為ABC.,字符變量輸出格式,日期時(shí)間存貯方式,SAS日期值存貯方式 SAS系統(tǒng)存貯日期值為1960年1月1日到這個(gè)日期之間的天數(shù)。 日期存貯方式舉例,例13.25 表中天數(shù)的計(jì)算程序。 data; date=mdy(1,1,1960); put date 8.; date=mdy(3,3,1962); put date 8.; date=mdy(8,4,1985); put date 8.; date=mdy(10,1,2002); put date 8.; date=mdy(7,4,1776); put date 8.; run;,SAS日期時(shí)間值存貯

15、方式,SAS存貯時(shí)間值從0時(shí)開始以秒記數(shù)。 日期時(shí)間值存貯方式舉例,例13.26 表中秒數(shù)的計(jì)算程序。 data; hms=hms (21,50,51); put hms=; x=21*60*60+50*60+51; put x=; date=mdy(10,1,2002); put date=; dhms=dhms (date,21,50,51); put dhms=; y=date*24*3600+x; put y=; run;,日期時(shí)間輸入格式,應(yīng)用舉例,例13 27 使用SAS日期時(shí)間的輸入格式。 data a; input date mmddyy10.; cards; 10-01-20

16、02 10/01/2002 ; run;,日期時(shí)間輸出格式,假定日期時(shí)間值為2003年3月27日12點(diǎn)5分5.49秒, 星期四,為2003年的第86天,第1季度,所在周的第5天。,例13.28 使用SAS日期時(shí)間的輸出格式。 data a; input date mmddyy10.; format date yymmdd10.; put date=; cards; 10-01-2002 10/01/2002 ; run; data a; input date mmddyy10.; format date date9.; put date=; cards; 10-01-2002 10/01/20

17、02 ; run;,data ; x=put(today(), date7.);put x; y=put(today(),8.0); put y; z=today(); put z; u=put(15260, yymmdd10.);put u; v=put(15260, date9.);put v; run; 顯示結(jié)果: 19SEP02 15602 15602 2001-10-12 12OCT2001,data; x=13807; format x yymmdd10.; put x=; run; 顯示結(jié)果: x=1997-10-20 data; date=11oct2001d; put dat

18、e=; format date yymmdd10.; run; 顯示結(jié)果: date=2001-10-11,缺失值處理,讀入含缺失值的數(shù)據(jù) 可以表示缺失值的字符有: 空格; 點(diǎn); MISSING語句規(guī)定的字符。 例13.29 空格表示缺失值的數(shù)據(jù)適合列方式讀入。 data a; input name $1-5 test1 7-8 test2 10-11; cards; ann 9296 susan 84 bill 81 ; run; 例中,SUSAN第一次測(cè)驗(yàn)缺席,BIL第二次測(cè)驗(yàn)缺席,空格表示缺失值。,例13.30 點(diǎn)表示缺失值的數(shù)據(jù)適合自由方式讀入。 data b; input name

19、$ test1 test2 ; cards; ann 9296 susan . 84 bill 81 . ; run; 例13.31 讀入由MISSING語句規(guī)定缺失值的數(shù)據(jù)。 data c; Missing A; input name $ test1 test2 ; cards; ann 9296 susan A 84 bill 81 A ; run;,系統(tǒng)產(chǎn)生的缺失值,SAS系統(tǒng)產(chǎn)生缺失值的情況有三種: 算術(shù)運(yùn)算; 非法運(yùn)算符; 非法字符轉(zhuǎn)換為數(shù)值。,第9章數(shù)據(jù)步變量與變量屬性控制,清華大學(xué)經(jīng)管學(xué)院 朱世武 Z Resdat樣本數(shù)據(jù): SAS論壇: ,本章內(nèi)容,本章介紹利用數(shù)據(jù)步變量與信息

20、控制語句進(jìn)行數(shù)據(jù)加工整理。 數(shù)據(jù)步變量與信息控制語句規(guī)定數(shù)據(jù)集中變量個(gè)數(shù)及相關(guān)信息。變量與信息控制語句不是執(zhí)行語句,可以出現(xiàn)數(shù)據(jù)步的任何地方,且功能相同。,ARRAY語句,ARRAY語句用于定義數(shù)組。數(shù)組通常由一組變量構(gòu)成。 利用數(shù)組可以簡化很多復(fù)雜的數(shù)據(jù)處理過程。 SAS系統(tǒng)引用數(shù)組等價(jià)引用構(gòu)成數(shù)組的那一組變量。,顯式下標(biāo)數(shù)組語句,顯式下標(biāo)數(shù)組由數(shù)組名,元素個(gè)數(shù)說明,及元素列表等構(gòu)成。 通過數(shù)組名引用整個(gè)數(shù)組,通過數(shù)組元素序號(hào)(也稱為下標(biāo))引用該元素。 語句格式 ARRAY array-namesubscript ; 選項(xiàng)說明:,下標(biāo)的三種格式,下標(biāo)用于表示數(shù)組中元素的個(gè)數(shù)和排列的范圍。括號(hào)

21、可用大括號(hào),中括號(hào)或圓括號(hào)。 下標(biāo)格式有三種:,例9.1 用格式一定義一維、二維數(shù)組。 Array simple3 red, green, yellow; /*定義一維數(shù)組 */ 例中,數(shù)組名為simple,數(shù)組有三個(gè)元素,對(duì)應(yīng)的變量命名分別為red, green, yellow. Array x5,3scorel-score15; /*定義二維數(shù)組 */ 例中,數(shù)組名為X,15個(gè)變量scorel-score15按順序從左上角開始逐行放入這個(gè)二維數(shù)組。 例9.2 用格式二定義二維數(shù)組。 Array x1:5,1:3scorel-score15; 當(dāng)用1作為數(shù)組下界時(shí)可以省略。 注意:用0作為下

22、界時(shí),可以加快處理時(shí)間,因?yàn)橛?jì)算下標(biāo)的時(shí)間減少了。,數(shù)組元素表示方法,數(shù)組元素必須全是數(shù)值變量,或全是字符變量,可以用任意順序列出。 數(shù)組元素的兩種表示方法: 列出變量名; 建立臨時(shí)數(shù)組元素列表。 例9.3 列出變量名。 Array C3 Cl-C3; Array C3; /*和上例句等價(jià) */ Array A* _NUMERIC_ ; Array A* _CHARACTER_;,建立臨時(shí)數(shù)組元素列表:,_TEMPORARY_; 使用臨時(shí)數(shù)組元素列表可以少占用內(nèi)存,加快執(zhí)行時(shí)間。 可以像使用DATA步中變量那樣使用臨時(shí)數(shù)組元素,但要注意有下面幾點(diǎn)不同: 它們沒有名字,引用時(shí)必須用數(shù)組名和下標(biāo);

23、 不能出現(xiàn)在輸出的數(shù)據(jù)集上; 不能用特殊下標(biāo)(*)來引用所有元素; 臨時(shí)數(shù)組元素的值被自動(dòng)保存,而不是像DATA步中的變量,在下一次重復(fù)開始時(shí)被置為缺失值。,例9.4 建立臨時(shí)數(shù)組元素。 若用如下程序,則會(huì)產(chǎn)生新變量t1,t2,t3; data a; set ResDat.class; array t(3) (5,10,15); run; 若用臨時(shí)數(shù)組,則不會(huì)產(chǎn)生新變量 data a; set ResDat.class; array t(3) _temporary_ (5,10,15); run;,使用臨時(shí)數(shù)組,不用臨時(shí)數(shù)組,初始值表示方法,例9.5 數(shù)組元素和初值通過對(duì)應(yīng)位置來確定。 arr

24、ay test (3) t1 t2 t3 (90 80 70); array ab(5) (5 4 3); 例中,第一個(gè)語句數(shù)組元素的個(gè)數(shù)與初值的個(gè)數(shù)相同,把初值90,80和70依次賦給變量t1,t1和t3。第二個(gè)語句分配5給ab1,4給ab2,3給ab3,因數(shù)組元素比給出的初始值多,多余的變量ab4和ab5為缺失值,而且SAS系統(tǒng)將發(fā)布一個(gè)警告信息。,應(yīng)用舉例,例9.6 定義數(shù)組例句。 array rain5 x1-x5; array ab(*)x y z; array x*_numeric_; array test(3)_temporary_(90 80 70); array days7

25、d1-d7; array x2:5green red denato fetzer; array test (3:4,3:7) test1-test10;,引用顯式下標(biāo)數(shù)組元素,凡是可用表達(dá)式的地方,都可以使用數(shù)組元素。 例9.7 通過下標(biāo)引用數(shù)組元素。 data new; input qa1-qa10 qb1-qb10; array test10 qa1-qa5 qb1-qb5; put test4= test6=; cards; 1 1 1 6 1 1 1 1 1 1 8 2 2 2 2 2 2 2 2 2 ; 例中,輸出qa1和qb1的值,即數(shù)組元素test(4)引用qa4, 數(shù)組元素te

26、st(6)引用qb1. 一個(gè)數(shù)組的定義僅在當(dāng)前的DATA步有效。如果想在幾個(gè)DATA步引用同一個(gè)數(shù)組,必須在每個(gè)DATA步中都定義這個(gè)數(shù)組。,455 data new; 456 input qa1-qa10 qb1-qb10; 457 array test10 qa1-qa5 qb1-qb5; 458 put test4= test6=; 459 cards; qa4=6 qb1=8 NOTE: 數(shù)據(jù)集 WORK.NEW 有 1 個(gè)觀測(cè)和 20 個(gè)變量。 NOTE: “DATA 語句”所用時(shí)間(總處理時(shí)間): 實(shí)際時(shí)間 0.01 秒 CPU 時(shí)間 0.01 秒 461 ;,例9.9 規(guī)定數(shù)組的

27、一些特殊元素作為循環(huán)DO語句范圍。 array day(7) d1-d7; do i=2 to 4; do i=1 to 7 by 2; do i=1,3; 例中,處理數(shù)組DAY中選定的一些特殊元素。,循環(huán)DO組中引用,例9.10 一個(gè)循環(huán)DO組里處理多個(gè)數(shù)組。 array day(*)d1-d4; do i=1 to dim(day); day(i)=day(i)+10; end; 例中,循環(huán)DO語句里使用DIM函數(shù)得到數(shù)組中元素的個(gè)數(shù)。用DIM函數(shù)作為DO語句上界時(shí),這個(gè)上界會(huì)根據(jù)數(shù)組元素個(gè)數(shù)的實(shí)際情況自動(dòng)調(diào)整,用DIM函數(shù)作為DO語句上界的所有語句都不必改動(dòng)。,例9.10 引用規(guī)定上下界

28、的一維數(shù)組。 Array yrs76:85 year76-year85; do i=76 to 85 ; if yrs(i)=9 then yrs(i)=.; end; do i=lbound(yrs) to hbound(yrs); if yrs(i)=9 then yrs(i)=.; end; 例中,兩個(gè)DO組是等價(jià)的。第二個(gè)DO組中LBOUND函數(shù)取數(shù)組YRS的下界,而HBOUND函數(shù)取YRS的上界。,DO WHILE和DO UNTIL組引用,使用DO WHILE或DO UNTIL語句處理數(shù)組時(shí),首先要?jiǎng)?chuàng)造循環(huán)變量,然后利用數(shù)組說明實(shí)現(xiàn)DO WHILE或DO UNTIL語句的條件,最后使

29、用程序語句來改變循環(huán)變量的值。,例9.13 DO WHILE語句用法。 data test; input x1-x5 y; array t(5) x1-x5; i=1; do while (t(i)y); put t(i)= y=; i=i+1; end; cards; 1 2 3 4 5 3 0 2 4 6 8 6 ; run;,482 data test; 483 input x1-x5 y; 484 array t(5) x1-x5; 485 i=1; 486 do while (t(i)y); 487 put t(i)= y=; 488 i=i+1; 489 end; 490 card

30、s; x1=1 y=3 x2=2 y=3 x1=0 y=6 x2=2 y=6 x3=4 y=6 NOTE: 數(shù)據(jù)集 WORK.TEST 有 2 個(gè)觀測(cè)和 7 個(gè)變量。 NOTE: “DATA 語句”所用時(shí)間(總處理時(shí)間): 實(shí)際時(shí)間 0.01 秒 CPU 時(shí)間 0.00 秒 493 ; 494 run;,隱含下標(biāo)數(shù)組語句,隱含下標(biāo)數(shù)組由一個(gè)數(shù)組名字,一個(gè)下標(biāo)變量和列表名組成。 語句格式: ARRAY array-name Array-elements ; 選項(xiàng)說明:,例9.14 定義字符數(shù)組。 data a; input x1 $3.x2 $3.; array item(j)$ 12 x1-x

31、10; 例中,定義字符數(shù)組ITEM,前兩個(gè)元素x1和 x2,長度為3,它們?cè)贗NPUT語句里定義了。其它8個(gè)元素在ARRAY語句里用長度說明選項(xiàng),給出長度為12。,例9.15 規(guī)定組成數(shù)組的元素。 Input (x1-x3) ($8.) x4 x5; Array item _character_; 例中,INPUT語句用輸入格式$8.讀字符變量x1至x3,而x4和x5是數(shù)值變量。ARRAY語句使用特殊變量_character_只能引入字符變量到數(shù)組中。 一個(gè)變量或一個(gè)隱含下標(biāo)數(shù)組可以是多個(gè)隱含數(shù)組的元素。,引用隱含數(shù)組元素,例9.16 引用隱含下標(biāo)數(shù)組的元素時(shí),要先設(shè)置下標(biāo)變量,然后在SAS語

32、句中使用數(shù)組名字。 data a; input id x1-x10 y1-y10; array big(i) x1-x10 y1-y10; i=11; put big; cards; 9155 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 ; 例中,輸出隱含數(shù)組BIG中的第11個(gè)元素值。,504 data a; 505 input id x1-x10 y1-y10; 506 array big(i) x1-x10 y1-y10; 507 i=11; 508 put big; 509 cards; 2 NOTE: 數(shù)據(jù)集 WORK.A 有 1 個(gè)觀測(cè)和 22 個(gè)

33、變量。 NOTE: “DATA 語句”所用時(shí)間(總處理時(shí)間): 實(shí)際時(shí)間 0.01 秒 CPU 時(shí)間 0.01 秒 511 ;,例9.17 循環(huán)DO組中引用。 data test; input s1-s5; array s s1-s5; /* array語句里沒有規(guī)定下標(biāo)變量 */ do _i_=1 to 5; /* 使用自動(dòng)變量_i_作為下標(biāo)變量 */ s=s*100; end; cards; .95 .88 .57 .90 .65 .95 .88 .57 .90 .65 .95 .88 .57 .90 .65 .95 .88 .57 .90 .65 ; run; 例中,s1到s5中的每個(gè)變

34、量值都乘以100.,例9.18 DO OVER組中引用。 data two; input id x1-x10 y1-y10; array big(i) x1-x10 y1-y10; do over big; /*等價(jià)于do I=1 to 20;其中20是big中元素的個(gè)數(shù)。*/ if big=. Then big=0; end; cards; 例中,將數(shù)組BIG中的所有缺失值改為0。,例9.21 使用一些數(shù)組作為另一些數(shù)組的元素。 data a; array test1 t1q1-t1q10; array test2 t2q1-t2q10; array test3 t3q1-t3q10; ar

35、ray ans(k) test1-test3; input t1q1-t1q10 t2q1-t2q10 t3q1-t3q10; do k=1 to 3; do j=1 to 10; if ans=. then ans=0; end; end; cards; 例中,有一組數(shù)據(jù),包括三組測(cè)驗(yàn)題,每組又有十個(gè)問題。每個(gè)學(xué)生的測(cè)驗(yàn)數(shù)據(jù)包括30個(gè)答案。在DATA步使用ARRAY語句可以把這30個(gè)答案中的缺失值改變?yōu)?.,例9.22 使用DO OVER語句處理上例。 do over ans; do over test1; if ans=. Then ans=0; end; end; 由于test1, te

36、st2, test3維數(shù)相同,在內(nèi)層do over語句中規(guī)定的數(shù)組名可以是這三個(gè)數(shù)組名的任一個(gè)。 只有當(dāng)嵌套的DO OVER語句引用的每個(gè)數(shù)組定義不同的下標(biāo)變量時(shí)才能使用嵌套DO OVER語句。,INFORMAT語句,INFORMAT語句把輸入格式與變量聯(lián)系起來。 語句格式: INFORMAT variables ; 選項(xiàng)說明: 選項(xiàng)DEFAULT可以出現(xiàn)在INFORMAT語句中的任何位置,僅適用于當(dāng)前的DATA步。 沒有規(guī)定臨時(shí)的缺省輸入格式時(shí),使用SAS系統(tǒng)規(guī)定的缺省輸入格式。,例9.23 規(guī)定臨時(shí)的缺省輸入格式。 data a; informat default=3.1 default=

37、$char4.; input x1-x5 name $; put x1-x5 name; cards; 11 22 33 44 100 johnny ; run; 程序提交后LOG窗口輸出顯示: 1.1 2.2 3.3 4.4 10 John 例中,在INPUT語句列出的變量X1-X5和NAME沒有規(guī)定輸入格式,那么使用這里規(guī)定的缺省輸入格式,即用格式3.1輸入X1-X5,用格式$char4.輸入NAME.,例9.23 取消已存在的輸入格式。 data a; set ResDat.idx000001; informat date; run; 例中,刪除變量DATE的輸入格式。這里INFORMA

38、T和SET語句的次序是重要的。,FORMAT語句,語句格式: FORMAT variables ; 選項(xiàng)說明: 選項(xiàng)DEFAULT可以出現(xiàn)在FORMAT語句中的任何位置,僅適用于當(dāng)前的DATA步。 沒有規(guī)定臨時(shí)的缺省輸出格式時(shí),使用SAS系統(tǒng)規(guī)定的缺省輸入格式。,例9.25 規(guī)定臨時(shí)的缺省輸出格式。 data ; format w $ 3. y 10.3 default=8.2 default=$8.; w=good morning.; x=good morning.; y=12.1; z=12.1; put w/x/y/z; run; 程序提交后LOG窗口輸出: goo good mor 1

39、2.100 12.10,例9.27 規(guī)定日期時(shí)間變量的輸出格式。 data a; input name $ bdate date7.; format bdate worddate.; cards; jimmy 15jan84 cindy 03mar85 ; proc print; run; 如果沒有FORMAT語句,表示日期變量date的值將用1960年1月1日和日期值之間的天數(shù)輸出。 因此,對(duì)于SAS日期時(shí)間值變量,必須用FORMAT語句對(duì)變量指定相應(yīng)的日期時(shí)間輸出格式,這樣才能便于理解。,Obs name bdate 1 jimmy January 15, 1984 2 cindy Mar

40、ch 3, 1985,LENGTH語句,LENGTH語句用于規(guī)定存貯變量值的字節(jié)長度。 語句格式 LENGTH ; 其中: variable-specification變量說明項(xiàng); DEFAULT=n規(guī)定新創(chuàng)建數(shù)值變量值的缺省字節(jié)長度從8改為n值。,variable-specification選項(xiàng)的格式,變量說明項(xiàng)格式: variable-1length 相關(guān)選項(xiàng)說明:,控制變量長度方法,用LENGTH語句或ATTRIB語句都可以指定變量的長度。 任意一個(gè)用LENGTH語句規(guī)定的長度可以用ATTRIB語句改變它,反之亦然。 變量的長度依賴于: 是數(shù)值還是字符變量; 變量是如何創(chuàng)建的; 有沒有L

41、ENGTH或ATTRIB語句。,數(shù)值變量長度控制,在SAS數(shù)據(jù)集中數(shù)值變量的存貯長度一般為8個(gè)字節(jié)(byte)。然而很多值可以用小于8個(gè)字節(jié)的長度準(zhǔn)確地表示。當(dāng)數(shù)據(jù)集很大時(shí),使用小于8個(gè)字節(jié)長度來存貯不需要很精確的值時(shí),可以有效地減少外部存貯的要求。 注意:用LENGTH語句截短數(shù)據(jù)時(shí),可能會(huì)引起誤差。,例9.28 截短數(shù)據(jù)引起的誤差問題。 data one; input a 1-4 b 6.; length default=3; cards; 1.4 6 1.2 5 1.1 4 1.3 4 1.3 5 1.3 6 2.0 3 ; data two; set one; if a=1.3; run; 例中,數(shù)據(jù)集TWO中沒有觀測(cè)。因?yàn)?,第二個(gè)DATA步的子集IF語句中的常數(shù)1.3用8個(gè)字節(jié)表示, 而數(shù)據(jù)集ONE中變量A按LENGTH語句規(guī)定只有3個(gè)字節(jié), 因此A不會(huì)等于1.3.,字符變量長度控制,如果不用LENGTH或ATTRIB語句規(guī)定變量的長度,字符變量的缺省長由它的第一個(gè)觀測(cè)值決定,這樣,后面更長的觀測(cè)值會(huì)被截短。 因INPUT語句可隱含地說明字符變量的長度。所以,當(dāng)LENGTH語句定義的字符長度不同于在INPUT語句中隱含表示的長度時(shí),LENGTH語句應(yīng)放在INPUT語句前面。,例9.29 LENGTH語句必

溫馨提示

  • 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)論