SAS統(tǒng)計軟件數(shù)據(jù)步變量與變量屬性控制課件_第1頁
SAS統(tǒng)計軟件數(shù)據(jù)步變量與變量屬性控制課件_第2頁
SAS統(tǒng)計軟件數(shù)據(jù)步變量與變量屬性控制課件_第3頁
SAS統(tǒng)計軟件數(shù)據(jù)步變量與變量屬性控制課件_第4頁
SAS統(tǒng)計軟件數(shù)據(jù)步變量與變量屬性控制課件_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第9章數(shù)據(jù)步變量與變量屬性控制清華大學(xué)經(jīng)管學(xué)院 朱世武本章內(nèi)容本章介紹利用數(shù)據(jù)步變量與信息控制語句進(jìn)行數(shù)據(jù)加工整理。數(shù)據(jù)步變量與信息控制語句規(guī)定數(shù)據(jù)集中變量個數(shù)及相關(guān)信息。變量與信息控制語句不是執(zhí)行語句,可以出現(xiàn)數(shù)據(jù)步的任何地方,且功能相同。 ARRAY語句 ARRAY語句用于定義數(shù)組。數(shù)組通常由一組變量構(gòu)成。利用數(shù)組可以簡化很多復(fù)雜的數(shù)據(jù)處理過程。 SAS系統(tǒng)引用數(shù)組等價引用構(gòu)成數(shù)組的那一組變量。 顯式下標(biāo)數(shù)組語句 顯式下標(biāo)數(shù)組由數(shù)組名,元素個數(shù)說明,及元素列表等構(gòu)成。通過數(shù)組名引用整個數(shù)組,通過數(shù)組元素序號(也稱為下標(biāo))引用該元素。 語句格式 ARRAY array-namesubscri

2、pt;選項說明: 下標(biāo)的三種格式 下標(biāo)用于表示數(shù)組中元素的個數(shù)和排列的范圍。括號可用大括號,中括號或圓括號。 下標(biāo)格式有三種: 例9.1 用格式一定義一維、二維數(shù)組。Array simple3 red, green, yellow; /*定義一維數(shù)組 */例中,數(shù)組名為simple,數(shù)組有三個元素,對應(yīng)的變量命名分別為red, green, yellow.Array x5,3scorel-score15; /*定義二維數(shù)組 */例中,數(shù)組名為X,15個變量scorelscore15按順序從左上角開始逐行放入這個二維數(shù)組。例9.2 用格式二定義二維數(shù)組。Array x1:5,1:3scorel-

3、score15;當(dāng)用1作為數(shù)組下界時可以省略。注意:用0作為下界時,可以加快處理時間,因為計算下標(biāo)的時間減少了。 數(shù)組元素表示方法 數(shù)組元素必須全是數(shù)值變量,或全是字符變量,可以用任意順序列出。數(shù)組元素的兩種表示方法: 列出變量名; 建立臨時數(shù)組元素列表。 例9.3 列出變量名。Array C3 Cl-C3;Array C3; /*和上例句等價 */Array A* _NUMERIC_ ; Array A* _CHARACTER_;建立臨時數(shù)組元素列表: _TEMPORARY_;使用臨時數(shù)組元素列表可以少占用內(nèi)存,加快執(zhí)行時間??梢韵袷褂肈ATA步中變量那樣使用臨時數(shù)組元素,但要注意有下面幾點

4、不同: 它們沒有名字,引用時必須用數(shù)組名和下標(biāo); 不能出現(xiàn)在輸出的數(shù)據(jù)集上; 不能用特殊下標(biāo)(*)來引用所有元素; 臨時數(shù)組元素的值被自動保存,而不是像DATA步中的變量,在下一次重復(fù)開始時被置為缺失值。 例9.4 建立臨時數(shù)組元素。若用如下程序,則會產(chǎn)生新變量t1,t2,t3;data a;set ResDat.class;array t(3) (5,10,15);run;若用臨時數(shù)組,則不會產(chǎn)生新變量data a;set ResDat.class;array t(3) _temporary_ (5,10,15);run;NameSexAgeHeight Weight t1 t2 t3Ali

5、ceF1356.58451015BarbaraF1365.39851015CarolF1462.8102.551015JaneF1259.884.551015JanetF1562.5112.551015JoyceF1151.350.551015使用臨時數(shù)組不用臨時數(shù)組NameSexAgeHeight WeightAliceF1356.584BarbaraF1365.398CarolF1462.8102.5JaneF1259.884.5JanetF1562.5112.5JoyceF1151.350.5初始值表示方法 例9.5 數(shù)組元素和初值通過對應(yīng)位置來確定。array test (3) t1

6、t2 t3 (90 80 70);array ab(5) (5 4 3);例中,第一個語句數(shù)組元素的個數(shù)與初值的個數(shù)相同,把初值90,80和70依次賦給變量t1,t1和t3。第二個語句分配5給ab1,4給ab2,3給ab3,因數(shù)組元素比給出的初始值多,多余的變量ab4和ab5為缺失值,而且SAS系統(tǒng)將發(fā)布一個警告信息。 應(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 d1-d7;array x2:5green

7、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ù)組元素test(6)引用qb1.一個數(shù)組的定義僅在當(dāng)前的DATA步有效。如果想

8、在幾個DATA步引用同一個數(shù)組,必須在每個DATA步中都定義這個數(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=8NOTE: 數(shù)據(jù)集 WORK.NEW 有 1 個觀測和 20 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒461 ;例9.9 規(guī)定數(shù)組的一些特殊元素作為循環(huán)DO語句范圍。array day(7) d1-d7;do i=2 t

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

10、rs(i)=9 then yrs(i)=.;end;do i=lbound(yrs) to hbound(yrs);if yrs(i)=9 then yrs(i)=.;end;例中,兩個DO組是等價的。第二個DO組中LBOUND函數(shù)取數(shù)組YRS的下界,而HBOUND函數(shù)取YRS的上界。 DO WHILE和DO UNTIL組引用 使用DO WHILE或DO UNTIL語句處理數(shù)組時,首先要創(chuàng)造循環(huán)變量,然后利用數(shù)組說明實現(xiàn)DO WHILE或DO UNTIL語句的條件,最后使用程序語句來改變循環(huán)變量的值。 例9.13 DO WHILE語句用法。data test;input x1-x5 y;arr

11、ay 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 30 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 cards;x1=1 y=3x2=2 y=3x1=0 y=6x2=2 y=6x3=4 y=6NOTE: 數(shù)據(jù)集 WORK.TEST 有 2 個觀測和 7 個變量。NOTE: “

12、DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.00 秒493 ;494 run;隱含下標(biāo)數(shù)組語句 隱含下標(biāo)數(shù)組由一個數(shù)組名字,一個下標(biāo)變量和列表名組成。語句格式:ARRAY array-name Array-elements ;選項說明: 例9.14 定義字符數(shù)組。data a;input x1 $3.x2 $3.;array item(j)$ 12 x1-x10;例中,定義字符數(shù)組ITEM,前兩個元素x1和 x2,長度為3,它們在INPUT語句里定義了。其它8個元素在ARRAY語句里用長度說明選項,給出長度為12。 例9.15 規(guī)定組成數(shù)組的元素。Inp

13、ut (x1-x3) ($8.) x4 x5;Array item _character_;例中,INPUT語句用輸入格式$8.讀字符變量x1至x3,而x4和x5是數(shù)值變量。ARRAY語句使用特殊變量_character_只能引入字符變量到數(shù)組中。一個變量或一個隱含下標(biāo)數(shù)組可以是多個隱含數(shù)組的元素。 引用隱含數(shù)組元素 例9.16 引用隱含下標(biāo)數(shù)組的元素時,要先設(shè)置下標(biāo)變量,然后在SAS語句中使用數(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

14、 1 1 2 2 2 2 2 2 2 2 2 2;例中,輸出隱含數(shù)組BIG中的第11個元素值。 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;2NOTE: 數(shù)據(jù)集 WORK.A 有 1 個觀測和 22 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒511 ;例9.17 循環(huán)DO組中引用。data test;input s1-s5;array s s1-s5; /* array

15、語句里沒有規(guī)定下標(biāo)變量 */do _i_=1 to 5; /* 使用自動變量_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中的每個變量值都乘以100.例9.18 DO OVER組中引用。data two;input id x1-x10 y1-y10;array big(i) x1-x10 y1-y10;do over big; /*等價于do I=1 to 20;其中20是big中元素的個數(shù)。*/ if

16、 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; array 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ù),包括三組測驗題,每組

17、又有十個問題。每個學(xué)生的測驗數(shù)據(jù)包括30個答案。在DATA步使用ARRAY語句可以把這30個答案中的缺失值改變?yōu)?.例9.22 使用DO OVER語句處理上例。do over ans; do over test1; if ans=. Then ans=0; end;end;由于test1, test2, test3維數(shù)相同,在內(nèi)層do over語句中規(guī)定的數(shù)組名可以是這三個數(shù)組名的任一個。只有當(dāng)嵌套的DO OVER語句引用的每個數(shù)組定義不同的下標(biāo)變量時才能使用嵌套DO OVER語句。 INFORMAT語句 INFORMAT語句把輸入格式與變量聯(lián)系起來。語句格式:INFORMAT variabl

18、es ;選項說明: 選項DEFAULT可以出現(xiàn)在INFORMAT語句中的任何位置,僅適用于當(dāng)前的DATA步。沒有規(guī)定臨時的缺省輸入格式時,使用SAS系統(tǒng)規(guī)定的缺省輸入格式。 例9.23 規(guī)定臨時的缺省輸入格式。data a;informat default=3.1 default=$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ī)定的缺

19、省輸入格式,即用格式3.1輸入X1-X5,用格式$char4.輸入NAME.例9.23 取消已存在的輸入格式。data a;set ResDat.idx000001;informat date;run;例中,刪除變量DATE的輸入格式。這里INFORMAT和SET語句的次序是重要的。 FORMAT語句 語句格式:FORMAT variables ;選項說明:選項DEFAULT可以出現(xiàn)在FORMAT語句中的任何位置,僅適用于當(dāng)前的DATA步。沒有規(guī)定臨時的缺省輸出格式時,使用SAS系統(tǒng)規(guī)定的缺省輸入格式。 例9.25 規(guī)定臨時的缺省輸出格式。data ;format w $ 3. y 10.3

20、default=8.2 default=$8.; w=good morning.; x=good morning.;y=12.1; z=12.1;put w/x/y/z;run;程序提交后LOG窗口輸出:googood mor12.10012.10例9.27 規(guī)定日期時間變量的輸出格式。data a;input name $ bdate date7.;format bdate worddate.;cards;jimmy 15jan84cindy 03mar85;proc print;run;如果沒有FORMAT語句,表示日期變量date的值將用1960年1月1日和日期值之間的天數(shù)輸出。因此,對

21、于SAS日期時間值變量,必須用FORMAT語句對變量指定相應(yīng)的日期時間輸出格式,這樣才能便于理解。 Obs name bdate1 jimmy January 15, 19842 cindy March 3, 1985LENGTH語句 LENGTH語句用于規(guī)定存貯變量值的字節(jié)長度。語句格式 LENGTHvariable-specification-1 ;其中: variable-specification變量說明項; DEFAULT=n規(guī)定新創(chuàng)建數(shù)值變量值的缺省字節(jié)長度從8改為n值。 variable-specification選項的格式 變量說明項格式:variable-1length相關(guān)選

22、項說明: 控制變量長度方法 用LENGTH語句或ATTRIB語句都可以指定變量的長度。任意一個用LENGTH語句規(guī)定的長度可以用ATTRIB語句改變它,反之亦然。變量的長度依賴于: 是數(shù)值還是字符變量; 變量是如何創(chuàng)建的; 有沒有LENGTH或ATTRIB語句。 數(shù)值變量長度控制 在SAS數(shù)據(jù)集中數(shù)值變量的存貯長度一般為8個字節(jié)(byte)。然而很多值可以用小于8個字節(jié)的長度準(zhǔn)確地表示。當(dāng)數(shù)據(jù)集很大時,使用小于8個字節(jié)長度來存貯不需要很精確的值時,可以有效地減少外部存貯的要求。注意:用LENGTH語句截短數(shù)據(jù)時,可能會引起誤差。 例9.28 截短數(shù)據(jù)引起的誤差問題。data one;input

23、 a 1-4 b 6.;length default=3;cards;1.4 61.2 51.1 41.3 41.3 51.3 62.0 3;data two; set one; if a=1.3;run;例中,數(shù)據(jù)集TWO中沒有觀測。因為,第二個DATA步的子集IF語句中的常數(shù)1.3用8個字節(jié)表示, 而數(shù)據(jù)集ONE中變量A按LENGTH語句規(guī)定只有3個字節(jié), 因此A不會等于1.3.字符變量長度控制 如果不用LENGTH或ATTRIB語句規(guī)定變量的長度,字符變量的缺省長由它的第一個觀測值決定,這樣,后面更長的觀測值會被截短。因INPUT語句可隱含地說明字符變量的長度。所以,當(dāng)LENGTH語句定

24、義的字符長度不同于在INPUT語句中隱含表示的長度時,LENGTH語句應(yīng)放在INPUT語句前面。 例9.29 LENGTH語句必須放在INPUT語句前面才能起作用。data a;length name $20;input name $1-10;cards;(數(shù)據(jù)行);run;例中,INPUT語句隱含指定變量NAME的長度為10。LENGTH語句(放在INPUT語句前面)給出在創(chuàng)建的數(shù)據(jù)集A中NAME的長度用20替代10。例9.30 字符變量的長由它的第一個觀測值決定。data b;input x;if x=1 then y=no;else y=yes;Cards;1 5;run;例中,字符變量

25、Y第一次在賦值語句Y=NO中出現(xiàn)時,它的長度被確定為2。于是,當(dāng)把YES賦給Y時,僅前兩個字符被存儲,S丟失了。為解決該問題,或者使用LENGTH語句規(guī)定Y的長度,或者重新排列語句順序。 xy11no25yeLENGTH語句位置的重要性 改變字符變量的長度時,LENGTH語句必須放在SET語句的前面; 改變數(shù)值變量的長度時,LENGTH語句可以放在任何地方。 例9.30 SET語句之后的LENGTH語句對字符變量不起作用。data a;lstknm=深發(fā)展;data b;lstknm=大秦鐵路;data c;set a b;length lstknm $12 ; proc print; run

26、;例中,length語句放在set語句之后不起作用,lstknm的長度為6,所以顯示的值分別為深發(fā)展和大秦鐵 。 Obs lstknm 1 深發(fā)展 2 大秦鐵上段程序的正確寫法:data a;lstknm=深發(fā)展;data b;lstknm=大秦鐵路;data c;length lstknm $12 ; /*length語句放在set語句之前 */set a b;proc print; /*顯示正確結(jié)果 */run; Obs lstknm 1 深發(fā)展 2 大秦鐵路LABEL語句 LABEL語句用于為變量加標(biāo)簽。變量標(biāo)簽是對變量的進(jìn)一步說明,看到標(biāo)簽就能理解變量的意思。這個標(biāo)簽在SAS數(shù)據(jù)集中同

27、變量名一起被存貯,而且可通過許多SAS過程被打印輸出。語句格式:LABEL variable-1=label-1 ;其中: Variable規(guī)定加標(biāo)簽的變量名; Label規(guī)定最多40個字符的標(biāo)簽。一個標(biāo)簽語句可以出現(xiàn)若干個變量名和標(biāo)簽。例9.32 Label語句的兩種寫法。第一種寫法:Labelscode=交易所用代碼|stock code by exchangehstocd=最新股票代碼|stock codeshrsdt=觀測日|shares outstanding observation dateshrout=觀測到的b股股本|b shares outstanding;第二種寫法:lab

28、el scode=交易所用代碼|stock code by exchangelabel hstocd=最新股票代碼|stock codelabel shrsdt=觀測日|shares outstanding observation datelabel shrout=觀測到的b股股本|b shares outstanding;例9.33 刪除變量的標(biāo)簽。Label scode= hstocd= shrsdt= shrout=;ATTRIB語句 ATTARIB語句用于規(guī)定多個變量的輸出格式,輸入格式,標(biāo)簽和長度。 語句格式 ATTRIB variable-list-1 attribute-list

29、-1;其中:variable-list規(guī)定要定義屬性的變量列表;attribute-list規(guī)定變量屬性列表。 可以規(guī)定的變量屬性 ATTRIB語句可以規(guī)定的變量屬性有: FORMATformat規(guī)定輸出格式; INFORMAT=informat規(guī)定輸入格式; LABEL=label規(guī)定標(biāo)簽; LENGTH=length規(guī)定長度。字符變量前面加$。ATTRIB語句永久地為變量規(guī)定了屬性??梢杂肍ORMAT,INFORMAT,LABEL,和LENGTH語句來指定變量的屬性。用ATTRIB語句指定的任何屬性都可以用多個屬性的語句改變它,反之亦然。 應(yīng)用舉例 例9.34 對單個變量定義一種屬性。at

30、trib scode length=$6;例9.35 對單個變量定義多種屬性。attrib date informat=mmddyy. Format=worddate.;例9.36 對多個變量定義相同的多種屬性。attrib S1 S2 S3 length=$4 label=SCORE;例9.37 對多個變量定義不同的多種屬性。attrib S length=$ 4 label=SCORE date informat=mmddyy. Format=worddate. label=TEST DATE;例9.38 對變量列表定義一種屬性。attrib month1-month12 label=MO

31、NTHLY SALES;變量后面幾種屬性選項的次序是任意的。 DROP語句 DROP語句規(guī)定輸出數(shù)據(jù)集中要刪除的變量,它對DATA步正在創(chuàng)建的所有SAS數(shù)據(jù)集都適用。語句格式:DROP variable-list;其中:varible-list規(guī)定輸出數(shù)據(jù)集中要刪除的變量。 例9.39 Drop語句與數(shù)據(jù)集中的drop=選項 。data a;set ResDat.class;drop sex age; /* drop語句 */ proc print;run;data a (drop=sex age); /* 數(shù)據(jù)集中的drop=選項 */ set ResDat.class;proc print

32、;run;例中,兩段程序的效果相同。DROP語句告訴SAS系統(tǒng)新建數(shù)據(jù)集A中將刪除SEX 和AGE兩個變量。 KEEP語句 KEEP語句規(guī)定輸出數(shù)據(jù)中要保留的變量,它對DATA步正在創(chuàng)建的所有SAS數(shù)據(jù)集都適用。語句格式:KEEP variable-list;其中:variable-list規(guī)定輸出數(shù)據(jù)集中要保留的變量。 例9.40 Keep語句與數(shù)據(jù)集中的keep=選項 。data a;set ResDat.idx000001;keep date clpr; /* keep語句 */ proc print data=a (obs=10);run;data a (keep=date clpr)

33、; /* 數(shù)據(jù)集中的keep=選項 */set ResDat.idx000001;proc print data=a (obs=10);run;DROP和KEEP語句使用規(guī)則 同一個DATA步不用同時使用DROP和KEEP語句; RENAME語句和KEEP或DROP語句一起使用時,KEEP語句和DROP語句會首先起作用。即,在KEEP語句或DROP語句中使用是舊名字。例9.41 RENAME語句和KEEP語句一起使用時,KEEP語句使用舊變量名時程序運行正常,keep語句使用新變量名時程序運行出錯。data a;set ResDat.Idx000001;keep date clpr; /* 使

34、用舊變量名,程序運行正常 */rename clpr=clpr_SH;run; data a;set ResDat.Idx000001;keep date clpr_SH; /* 使用新變量名,程序不能正常運行 */rename clpr=clpr_SH;run;WARNING: 從未引用過 DROP、KEEP 或 RENAME 列表中的變量 clpr_SH。WARNING: 從未引用過 DROP、KEEP 或 RENAME 列表中的變量 clpr。NOTE: 從數(shù)據(jù)集 RESDAT.IDX000001 讀取了 3891 個觀測。NOTE: 數(shù)據(jù)集 WORK.A 有 3891 個觀測和 1 個

35、變量。數(shù)據(jù)集選項DROP=和KEEP=使用規(guī)則 數(shù)據(jù)集選項drop=和keep=的使用規(guī)則基本同drop和keep語句的使用規(guī)則。但更靈活,實現(xiàn)同樣的功能,對于不同的數(shù)據(jù)集,新舊名的使用規(guī)則也不同 。RENAME語句 RENAME語句可以更改多個變量的名字。語句格式:RENAME old-name-1=new-name-1 ;其中: old-name規(guī)定輸入數(shù)據(jù)集中出現(xiàn)的變量名字; new-name規(guī)定變量的新名字。由于變量的新名字在輸出的數(shù)據(jù)集中才起作用,所以,在當(dāng)前DATA步的程序語句須使用老名字。例9.45 應(yīng)用舉例。data a (keep=date open low high clo

36、se);set ResDat.Idx000001; rename oppr=open lopr=low hipr=high clpr=close; proc print data=a (obs=3);run;RETAIN語句 RETAIN語句來規(guī)定單個變量,變量列表,或數(shù)組元素的初始值。語句格式:RETAINelement-list-1element-list-n;選項說明:例9.46 沒有選項時,規(guī)定用INPUT語句或賦值語句創(chuàng)建的所有變量值從DATA步的這次執(zhí)行到下一次重復(fù)時被保留。于是數(shù)據(jù)值在一些觀測中可能保留了本應(yīng)為缺失值的其它值。data a;input id ; retain;if

37、 id=1 then test=pass;if id=2 then test=fail;cards;1 2 2 2 3 5 1 5 3 1;proc print noobs;run;打印輸出結(jié)果為:例中,當(dāng)ID的值為1或2時,都是對的。但當(dāng)ID等于1和2以外的值時,沒有一個IF條件是真的,故TEST沒有接收新的值。由于有RETAIN語句,所以,TEST就保持從上一觀測中得到的值,這樣就產(chǎn)生錯誤。若從這段程序刪除RETAIN語句,當(dāng)ID值不等于1或2時TEST的值為空格(缺失值).data a; 打印輸出結(jié)果為:input id ; if id=1 then test=pass;if id=2

38、then test=fail;cards;1 2 2 2 3 5 1 5 3 1;proc print noobs;run;用_ALL_, _CHAR_或_NUMERIC_規(guī)定變量列表時,只有在RETAIN語句之前定義的變量才有效。第11章 全局通用語句清華大學(xué)經(jīng)管學(xué)院 朱世武ZhushwResdat樣本數(shù)據(jù):SAS論壇: 全局通用語句是可以用在任何地方的SAS語句。這些語句既可以用在數(shù)據(jù)步(DATA步),也可以用在過程步(PROC步),甚至還可以單獨使用。 注釋語句 注釋語句可以放在SAS程序的任何地方作為程序的說明,或者介紹整個程序的步驟或算法等。語句格式格式一:* message;信息的

39、長度可任意,但不能包含分號(;),最后的分號表示信息結(jié)束。 格式二:/*message*/中間的信息可以包含分號,但這種形式的注釋不能嵌套。應(yīng)用舉例 例11.1 注釋語句應(yīng)用。proc print data=ResDat.stk000002 (obs=10) noobs; /*輸出前10個觀測,不輸出觀測序號*/var oppr hipr lopr clpr;title股票行情;run;proc means data=ResDat.stk000002 ; *對數(shù)據(jù)集ResDat.stk000002使用means過程;var oppr hipr lopr clpr; /*輸出變量oppr hip

40、r lopr clpr的均值*/run;例11.2 標(biāo)準(zhǔn)SAS程序開頭,記錄SAS程序信息的注釋形式。/*/ /* Begin Estimation for Grunfelds Investment Models */ /* See SAS/ETS Users Guide, Version 5 Edition, */ /* pages */ /*/ X語句 運行SAS系統(tǒng)時,發(fā)布主機(jī)操作系統(tǒng)命令。語句格式:X ;其中:command規(guī)定主機(jī)操作系統(tǒng)的命令。例11.8 應(yīng)用舉例。x mkdir d:ResDat1;libname ResDat1 d:ResDat1;data ResDat1.cl

41、ass;set ResDat.class;run;例中,在SAS會話期間用主機(jī)操作系統(tǒng)命令創(chuàng)建一個目錄D:ResDat_3.注意:鍵入EXIT命令退出操作系統(tǒng)返回到SAS會話。TITLE語句 TITLE語句規(guī)定SAS輸出文件和其它SAS輸出標(biāo)題。每一個TITLE語規(guī)定一級標(biāo)題,最多可規(guī)定10級標(biāo)題。語句格式:TITLE;其中: n緊跟在詞TIILE后面(不能有空格)的數(shù)字,用來規(guī)定標(biāo)題的級別; text規(guī)定標(biāo)題的內(nèi)容。規(guī)定標(biāo)題的內(nèi)容一直有效,但可以重新規(guī)定或取消。例11.9 只規(guī)定第1和第5級標(biāo)題的內(nèi)容時,中間標(biāo)題為空白。title this is the 1th title line;tit

42、le5 this is the 5th title line;例11.10 取消所有標(biāo)題內(nèi)容。title; 例11.11 取消第3級及以后的所有標(biāo)題內(nèi)容。title3;FOOTNOTE語句 FOOTNOTE語句在每一頁的底部輸出一些腳注行。最多可產(chǎn)生10個腳注行。語句格式:FOOTNOTE;其中: n緊跟在詞FOOTNOTE后面(不能有空格)的數(shù)字,用來規(guī)定腳注的行號; text規(guī)定腳注行的內(nèi)容。規(guī)定的腳注行內(nèi)容將輸出在所有過程的輸出頁上,但可以重新規(guī)定或取消。例11.12 規(guī)定腳注。footnote 清華大學(xué)金融系;例11.13 取消所有已規(guī)定的腳注行。footnote;例11.14 取消第

43、3個及以后的所有腳注行。footnote3; RUN語句 RUN語句使SAS程序被執(zhí)行。語句格式:RUN ;其中:CANCEL讓SAS系統(tǒng)結(jié)束當(dāng)前步的執(zhí)行。SAS將輸出一個信息說明這一步?jīng)]有執(zhí)行。但CANECL選項不能阻止包含CARDS或CARDS4語句的DATA步執(zhí)行。例11.15 不能省略RUN語句的情況。title using proc means;proc means data=ResDat.class min max;var age height weight;run; /*此RUN語不能省略省略RUN語句 */title using proc plot;proc plot data

44、=ResDat.class;plot age*height;run;例中,第一個RUN語句在讀第二個TITLE語之前執(zhí)行PROC MEANS步。如果省略第一個RUN語,SAS系統(tǒng)在它讀PROC PLOT語句之后執(zhí)行PROC MEANS步。這時第二個TITLE語覆蓋第一個TITLE語,也就是兩個過程的輸出都包含了標(biāo)題USING PROC PLOT。所以,這種情況下,第一個RUN語不能省略。 using proc plot 17 MEANS 過程 變量 最小值 最大值 Age 11.0000000 16.0000000 Height 51.3000000 72.0000000 Weight 50.

45、5000000 150.0000000 using proc means 16 MEANS 過程 變量 最小值 最大值 Age 11.0000000 16.0000000 Height 51.3000000 72.0000000 Weight 50.5000000 150.0000000 不省略run省略run例11.16 使用選項CANCEL。proc means data=ResDat.idx000001;var clpr X; /*注意數(shù)據(jù)集中沒有變量X */run cancel;例中,當(dāng)發(fā)現(xiàn)SAS程序有錯誤不能運行這一段序時,使用選項CANCEL結(jié)束當(dāng)前步的執(zhí)行。LIBNAME語句 L

46、IBNAME語句定義SAS邏輯庫。 LIBNAME語句把一個libref(庫標(biāo)記名)和一個目錄名聯(lián)系起來,使用戶可在SAS語句中使用庫標(biāo)記來指示這個目錄。語句格式 LIBNAME libref ;LIBNAME libref Clear;LIBNAME libref |_ All_ List;三種格式反映了LIBNAME語句的三種用法。選項說明 應(yīng)用舉例 例11.18 LIBNAME規(guī)定不同引擎的邏輯庫。libname SASDB1 tape SAS- data-library; /*規(guī)定一個TAPE引擎*/libname SASDB2 V6 SAS- data-library; /*規(guī)定版本

47、為V6引擎*/libname SASDB3 ODBC SAS- data-library; /*規(guī)定版本為ODBC引擎*/例11.19 不同引擎的邏輯庫數(shù)據(jù)集的轉(zhuǎn)換。libname ResDatv6 v6 D:ResDat;data ResDatv6.class;set ResDat.class;run;例11.20 對已經(jīng)存在的邏輯庫使用LIBNAME語句聯(lián)系一個SAS引擎。libname SASDB3 ODBC;例11.21 一個物理地址聯(lián)系兩個庫標(biāo)記。libname ResDat1 D:ResDat;libname ResDat2 D:ResDat;run;例11.23 脫離與庫標(biāo)記的聯(lián)

48、系。LIBNAME libref CLEAR;例11.24 列出邏輯庫的屬性。libname ResDat list; /*列出邏輯庫ResDat的屬性 */libname _all_ list; /*列出所有邏輯庫的屬性 */run;例11.25 多個物理地址指定一個邏輯庫。libname new (d: resdat d:resstk);例11.26 多個不同的邏輯庫組成一個邏輯庫。libname new (resdat resstk);FILENAME語句 FILENAME語句把SAS的文件標(biāo)記與外部文件的全名或輸出設(shè)備聯(lián)系起來。 用INFILE,F(xiàn)ILE,或%INCLUDE語句中調(diào)用S

49、AS文件前,要先使用FILENAME語句來定義文件。 用戶可以把一個文件標(biāo)記同單個外部文件建立聯(lián)系,也可以很多外部文件建立聯(lián)系。 文件標(biāo)記和文件名字之間的聯(lián)系只保持在SAS會話期間,或下一個FILENAME語句再定義前。語句格式 建立文件標(biāo)記與外部文件的聯(lián)系:FILENAME fileref external-file;清除文件標(biāo)記與外部文件的聯(lián)系:FILENAME fileref|_ALL_CLEAR;建立文件標(biāo)記與某個輸出設(shè)備的聯(lián)系:FILENAME fileref device-type;列出外部文件的屬性:FILENAME fileref|_ALL_LIST;其它格式:FILENAME fileref CATALOG catalog;FILENAME fileref

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論