




下載本文檔
版權(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-names
2、ubscript ; 選項說明:,下標(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個變量scorel-score15按順序從左上角開始逐行放入這個二維數(shù)組。 例9.2 用格式二定義二維數(shù)組。 Array
3、x1:5,1:3scorel-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í)行時間。 可以像使用DATA
4、步中變量那樣使用臨時數(shù)組元素,但要注意有下面幾點(diǎn)不同: 它們沒有名字,引用時必須用數(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;,
5、使用臨時數(shù)組,不用臨時數(shù)組,初始值表示方法,例9.5 數(shù)組元素和初值通過對應(yīng)位置來確定。 array test (3) t1 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_;
6、array test(3)_temporary_(90 80 70); array days7 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
7、2 2 2 ; 例中,輸出qa1和qb1的值,即數(shù)組元素test(4)引用qa4, 數(shù)組元素test(6)引用qb1. 一個數(shù)組的定義僅在當(dāng)前的DATA步有效。如果想在幾個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=8 NOTE: 數(shù)據(jù)集 WORK.NEW 有 1 個觀測和 20 個變量。 NOTE: “DATA 語句”所用時間(總處
8、理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒 461 ;,例9.9 規(guī)定數(shù)組的一些特殊元素作為循環(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 一個循環(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ù)的
9、實際情況自動調(diào)整,用DIM函數(shù)作為DO語句上界的所有語句都不必改動。,例9.10 引用規(guī)定上下界的一維數(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; 例中,兩個DO組是等價的。第二個DO組中LBOUND函數(shù)取數(shù)組YRS的下界,而HBOUND函數(shù)取YRS的上界。,DO WHILE和DO UNTIL組引用,使用DO WHILE或DO UNTIL語句處理數(shù)組
10、時,首先要創(chuàng)造循環(huán)變量,然后利用數(shù)組說明實現(xiàn)DO WHILE或DO UNTIL語句的條件,最后使用程序語句來改變循環(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)
11、; 487 put t(i)= y=; 488 i=i+1; 489 end; 490 cards; 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 個觀測和 7 個變量。 NOTE: “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ù)組。 da
12、ta 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ù)組的元素。 Input (x1-x3) ($8.) x4 x5; Array item _character_; 例中,INPUT語句用輸入格式$8.讀字符變量x1至x3,而x4和x5是數(shù)值變量。ARRAY語句使用特殊變量_character_只能引入字符變量到數(shù)組中。 一個變量或一個隱含下標(biāo)數(shù)組可以是多個隱含數(shù)組的
13、元素。,引用隱含數(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 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
14、big; 509 cards; 2 NOTE: 數(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語句里沒有規(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
15、.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 big=. Then big=0; end; cards; 例中,將數(shù)組BIG中的所有缺失值改為0。,例9.21 使用一些數(shù)組作為另一些數(shù)組的元素。 data a; array test1 t1q1-t1q10; ar
16、ray 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ù),包括三組測驗題,每組又有十個問題。每個學(xué)生的測驗數(shù)據(jù)包括30個答案。在DATA步使用ARRAY語句可以把這30個答案中的缺失值改變?yōu)?.,例9.22 使用DO OVER語句處理上例。 do over ans; do over t
17、est1; 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 variables ; 選項說明: 選項DEFAULT可以出現(xiàn)在INFORMAT語句中的任何位置,僅適用于當(dāng)前的DATA步。 沒有規(guī)定臨時的缺省輸入格式時,使用SAS系統(tǒng)規(guī)定的缺省輸入格式。,例9.23 規(guī)定
18、臨時的缺省輸入格式。 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ī)定的缺省輸入格式,即用格式3.1輸入X1-X5,用格式$char4.輸入NAME.,例9.23 取消已存在的輸入格式。 data a; set ResDat.idx000001
19、; 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 default=8.2 default=$8.; w=good morning.; x=good morning.; y=12.1; z=12.1
20、; put w/x/y/z; run; 程序提交后LOG窗口輸出: goo good mor 12.100 12.10,例9.27 規(guī)定日期時間變量的輸出格式。 data a; input name $ bdate date7.; format bdate worddate.; cards; jimmy 15jan84 cindy 03mar85 ; proc print; run; 如果沒有FORMAT語句,表示日期變量date的值將用1960年1月1日和日期值之間的天數(shù)輸出。 因此,對于SAS日期時間值變量,必須用FORMAT語句對變量指定相應(yīng)的日期時間輸出格式,這樣才能便于理解。,Obs
21、 name bdate 1 jimmy January 15, 1984 2 cindy March 3, 1985,LENGTH語句,LENGTH語句用于規(guī)定存貯變量值的字節(jié)長度。 語句格式 LENGTH ; 其中: variable-specification變量說明項; DEFAULT=n規(guī)定新創(chuàng)建數(shù)值變量值的缺省字節(jié)長度從8改為n值。,variable-specification選項的格式,變量說明項格式: variable-1length 相關(guān)選項說明:,控制變量長度方法,用LENGTH語句或ATTRIB語句都可以指定變量的長度。 任意一個用LENGTH語句規(guī)定的長度可以用ATTRI
22、B語句改變它,反之亦然。 變量的長度依賴于: 是數(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 a 1-4 b 6.; length default=3; cards; 1.4 6 1.2 5 1.1 4 1.3 4 1.3
23、 5 1.3 6 2.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語句定義的字符長度不同于在INPUT語句中隱含表示的長度時,LENGTH語句應(yīng)放在INPUT語句前面。,例
24、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; 例中,字符變量Y第一次在賦值語句Y=NO中出現(xiàn)時,它的長度被確定為2。于是,當(dāng)
25、把YES賦給Y時,僅前兩個字符被存儲,S丟失了。為解決該問題,或者使用LENGTH語句規(guī)定Y的長度,或者重新排列語句順序。,LENGTH語句位置的重要性,改變字符變量的長度時,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; 例中,length語句放在set語句之后不起作用,lstknm的長
26、度為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ù)集中同變量名一起被存貯,而且可通過許多SAS過程被打
27、印輸出。 語句格式: LABEL variable-1=label-1 ; 其中: Variable規(guī)定加標(biāo)簽的變量名; Label規(guī)定最多40個字符的標(biāo)簽。 一個標(biāo)簽語句可以出現(xiàn)若干個變量名和標(biāo)簽。,例9.32 Label語句的兩種寫法。 第一種寫法: Label scode=交易所用代碼|stock code by exchange hstocd=最新股票代碼|stock code shrsdt=觀測日|shares outstanding observation date shrout=觀測到的b股股本|b shares outstanding; 第二種寫法: label scode=交
28、易所用代碼|stock code by exchange label hstocd=最新股票代碼|stock code label shrsdt=觀測日|shares outstanding observation date label 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-1 ;
29、 其中: 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 對單個變量定義一種屬性。
30、 attrib 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-month
31、12 label=MONTHLY 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 Re
32、sDat.class; proc print; 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=
33、10); run; data a (keep=date clpr); /* 數(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語句使用舊變量名時程序運(yùn)行正常,keep語句使用新變量名時程序運(yùn)行出錯。 data a; s
34、et ResDat.Idx000001; keep date clpr; /* 使用舊變量名,程序運(yùn)行正常 */ rename clpr=clpr_SH; run; data a; set ResDat.Idx000001; keep date clpr_SH; /* 使用新變量名,程序不能正常運(yùn)行 */ rename clpr=clpr_SH; run;,數(shù)據(jù)集選項DROP=和KEEP=使用規(guī)則,數(shù)據(jù)集選項drop=和keep=的使用規(guī)則基本同drop和keep語句的使用規(guī)則。但更靈活,實現(xiàn)同樣的功能,對于不同的數(shù)據(jù)集,新舊名的使用規(guī)則也不同 。,RENAME語句,RENAME語句可以更改多
35、個變量的名字。 語句格式: 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 close); set ResDat.Idx000001; rename oppr=open lopr=low hipr=high clpr=close; proc print data=a (obs=3); run;,RETAIN語句,
36、RETAIN語句來規(guī)定單個變量,變量列表,或數(shù)組元素的初始值。 語句格式: RETAIN ; 選項說明:,例9.46 沒有選項時,規(guī)定用INPUT語句或賦值語句創(chuàng)建的所有變量值從DATA步的這次執(zhí)行到下一次重復(fù)時被保留。于是數(shù)據(jù)值在一些觀測中可能保留了本應(yīng)為缺失值的其它值。 data a; input id ; retain; if 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
37、和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 then test=fail; cards; 1 2 2 2 3 5 1 5 3 1 ; proc print noobs; run; 用_ALL_, _CHAR_或_NUMERIC_規(guī)定變量列表時,只有在RETAIN語句之前定義的變量才有效。
38、,第11章 全局通用語句,清華大學(xué)經(jīng)管學(xué)院 朱世武 Z Resdat樣本數(shù)據(jù): SAS論壇: ,全局通用語句是可以用在任何地方的SAS語句。這些語句既可以用在數(shù)據(jù)步(DATA步),也可以用在過程步(PROC步),甚至還可以單獨(dú)使用。,注釋語句,注釋語句可以放在SAS程序的任何地方作為程序的說明,或者介紹整個程序的步驟或算法等。,語句格式 格式一: * message; 信息的長度可任意,但不能包含分號(;),最后的分號表示信息結(jié)束。 格式二: /*message*/ 中間的信息可以包含分號,但這種形式的注釋不能嵌套。,應(yīng)用舉例,例11.1 注釋語句應(yīng)用。 proc print data=Res
39、Dat.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 hipr lopr clpr的均值*/ run;,例11.2 標(biāo)準(zhǔn)SAS程序開頭,記錄SAS程序信息的注釋形式。 /*-*/ /*- Begin Estimation for Grunfelds Investm
40、ent Models -*/ /*- See SAS/ETS Users Guide, Version 5 Edition, -*/ /*- pages -*/ /*-*/,X語句,運(yùn)行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.class; set ResDat.class; run; 例中,在SAS會話期間用主機(jī)操作系統(tǒng)命令創(chuàng)建一個目錄D:ResDat_3. 注意:鍵入EXIT命令退出操作
41、系統(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; title5 this is the 5th title line; 例11.10 取消所有標(biāo)題內(nèi)容。 title; 例11.11 取消第3級
42、及以后的所有標(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 取消第3個及以后的所有腳注行。 footnote3;,RUN語句,RUN語句使SAS程序被執(zhí)行。 語句格式: RUN
43、 ; 其中: 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=ResDat.class; plot age*height; run; 例中,第一個
44、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.5000000 150.0000000 -,using proc means
45、 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程序有錯誤不能運(yùn)行這一段序時,使用選項CANCEL結(jié)束當(dāng)前步的執(zhí)行。,LIBNAME語句,LIBNAME語句定義SAS邏輯庫。 LIBNAME
46、語句把一個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ī)定版本為V6引擎*/ libname SA
47、SDB3 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)系。 LI
48、BNAME 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語
49、句中調(diào)用SAS文件前,要先使用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 FTPexternal-fil
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械質(zhì)量檢測服務(wù)合同
- 職場辦公技能培訓(xùn)教育范文
- 高考語文復(fù)習(xí):人物傳記類文言文專練
- 電線電纜采購合同書
- 法律行業(yè)律師服務(wù)費(fèi)用免責(zé)協(xié)議
- 經(jīng)典童話白雪公主的解讀與賞析
- 高考英語完形填空專題集中訓(xùn)練含參考答案(5份)
- 農(nóng)村居民公共服務(wù)需求滿足指導(dǎo)手冊
- 問題解決指南
- 金融科技服務(wù)風(fēng)險免責(zé)合同
- 2025年蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 字體設(shè)計完整版本
- 【歷史】安史之亂與唐朝衰亡課件 2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 2024年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 《歡樂運(yùn)動會:1 我為班級出把力》說課稿-2024-2025學(xué)年四年級上冊綜合實踐活動滬科黔科版
- 2024年汽車駕駛員(高級)證考試題庫附答案
- 《兔的飼養(yǎng)管理》課件
- 2025年事業(yè)單位考試(綜合管理類A類)綜合應(yīng)用能力試題及解答參考
- “互聯(lián)網(wǎng)+”大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽計劃書一等獎
- 烹飪(西餐)第三屆全省職業(yè)技能大賽烹飪(西餐)項目技術(shù)文件
- 四川政采評審專家入庫考試基礎(chǔ)題練習(xí)試題附答案
評論
0/150
提交評論