




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第9章數據步變量與變量屬性控制清華大學經管學院 朱世武本章內容本章介紹利用數據步變量與信息控制語句進行數據加工整理。數據步變量與信息控制語句規定數據集中變量個數及相關信息。變量與信息控制語句不是執行語句,可以出現數據步的任何地方,且功能相同。 ARRAY語句 ARRAY語句用于定義數組。數組通常由一組變量構成。利用數組可以簡化很多復雜的數據處理過程。 SAS系統引用數組等價引用構成數組的那一組變量。 顯式下標數組語句 顯式下標數組由數組名,元素個數說明,及元素列表等構成。通過數組名引用整個數組,通過數組元素序號(也稱為下標)引用該元素。 語句格式 ARRAY array-namesubscri
2、pt;選項說明: 下標的三種格式 下標用于表示數組中元素的個數和排列的范圍。括號可用大括號,中括號或圓括號。 下標格式有三種: 例9.1 用格式一定義一維、二維數組。Array simple3 red, green, yellow; /*定義一維數組 */例中,數組名為simple,數組有三個元素,對應的變量命名分別為red, green, yellow.Array x5,3scorel-score15; /*定義二維數組 */例中,數組名為X,15個變量scorelscore15按順序從左上角開始逐行放入這個二維數組。例9.2 用格式二定義二維數組。Array x1:5,1:3scorel-
3、score15;當用1作為數組下界時可以省略。注意:用0作為下界時,可以加快處理時間,因為計算下標的時間減少了。 數組元素表示方法 數組元素必須全是數值變量,或全是字符變量,可以用任意順序列出。數組元素的兩種表示方法: 列出變量名; 建立臨時數組元素列表。 例9.3 列出變量名。Array C3 Cl-C3;Array C3; /*和上例句等價 */Array A* _NUMERIC_ ; Array A* _CHARACTER_;建立臨時數組元素列表: _TEMPORARY_;使用臨時數組元素列表可以少占用內存,加快執行時間。可以像使用DATA步中變量那樣使用臨時數組元素,但要注意有下面幾點
4、不同: 它們沒有名字,引用時必須用數組名和下標; 不能出現在輸出的數據集上; 不能用特殊下標(*)來引用所有元素; 臨時數組元素的值被自動保存,而不是像DATA步中的變量,在下一次重復開始時被置為缺失值。 例9.4 建立臨時數組元素。若用如下程序,則會產生新變量t1,t2,t3;data a;set ResDat.class;array t(3) (5,10,15);run;若用臨時數組,則不會產生新變量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使用臨時數組不用臨時數組NameSexAgeHeight WeightAliceF1356.584BarbaraF1365.398CarolF1462.8102.5JaneF1259.884.5JanetF1562.5112.5JoyceF1151.350.5初始值表示方法 例9.5 數組元素和初值通過對應位置來確定。array test (3) t1
6、t2 t3 (90 80 70);array ab(5) (5 4 3);例中,第一個語句數組元素的個數與初值的個數相同,把初值90,80和70依次賦給變量t1,t1和t3。第二個語句分配5給ab1,4給ab2,3給ab3,因數組元素比給出的初始值多,多余的變量ab4和ab5為缺失值,而且SAS系統將發布一個警告信息。 應用舉例 例9.6 定義數組例句。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;引用顯式下標數組元素 凡是可用表達式的地方,都可以使用數組元素。例9.7 通過下標引用數組元素。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的值,即數組元素test(4)引用qa4, 數組元素test(6)引用qb1.一個數組的定義僅在當前的DATA步有效。如果想
8、在幾個DATA步引用同一個數組,必須在每個DATA步中都定義這個數組。 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: 數據集 WORK.NEW 有 1 個觀測和 20 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒461 ;例9.9 規定數組的一些特殊元素作為循環DO語句范圍。array day(7) d1-d7;do i=2 t
9、o 4;do i=1 to 7 by 2;do i=1,3;例中,處理數組DAY中選定的一些特殊元素。 循環DO組中引用 例9.10 一個循環DO組里處理多個數組。array day(*)d1-d4;do i=1 to dim(day);day(i)=day(i)+10;end;例中,循環DO語句里使用DIM函數得到數組中元素的個數。用DIM函數作為DO語句上界時,這個上界會根據數組元素個數的實際情況自動調整,用DIM函數作為DO語句上界的所有語句都不必改動。 例9.10 引用規定上下界的一維數組。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函數取數組YRS的下界,而HBOUND函數取YRS的上界。 DO WHILE和DO UNTIL組引用 使用DO WHILE或DO UNTIL語句處理數組時,首先要創造循環變量,然后利用數組說明實現DO WHILE或DO UNTIL語句的條件,最后使用程序語句來改變循環變量的值。 例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: 數據集 WORK.TEST 有 2 個觀測和 7 個變量。NOTE: “
12、DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.00 秒493 ;494 run;隱含下標數組語句 隱含下標數組由一個數組名字,一個下標變量和列表名組成。語句格式:ARRAY array-name Array-elements ;選項說明: 例9.14 定義字符數組。data a;input x1 $3.x2 $3.;array item(j)$ 12 x1-x10;例中,定義字符數組ITEM,前兩個元素x1和 x2,長度為3,它們在INPUT語句里定義了。其它8個元素在ARRAY語句里用長度說明選項,給出長度為12。 例9.15 規定組成數組的元素。Inp
13、ut (x1-x3) ($8.) x4 x5;Array item _character_;例中,INPUT語句用輸入格式$8.讀字符變量x1至x3,而x4和x5是數值變量。ARRAY語句使用特殊變量_character_只能引入字符變量到數組中。一個變量或一個隱含下標數組可以是多個隱含數組的元素。 引用隱含數組元素 例9.16 引用隱含下標數組的元素時,要先設置下標變量,然后在SAS語句中使用數組名字。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;例中,輸出隱含數組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: 數據集 WORK.A 有 1 個觀測和 22 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒511 ;例9.17 循環DO組中引用。data test;input s1-s5;array s s1-s5; /* array
15、語句里沒有規定下標變量 */do _i_=1 to 5; /* 使用自動變量_i_作為下標變量 */ 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中元素的個數。*/ if
16、 big=. Then big=0;end;cards;例中,將數組BIG中的所有缺失值改為0。 例9.21 使用一些數組作為另一些數組的元素。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;例中,有一組數據,包括三組測驗題,每組
17、又有十個問題。每個學生的測驗數據包括30個答案。在DATA步使用ARRAY語句可以把這30個答案中的缺失值改變為0.例9.22 使用DO OVER語句處理上例。do over ans; do over test1; if ans=. Then ans=0; end;end;由于test1, test2, test3維數相同,在內層do over語句中規定的數組名可以是這三個數組名的任一個。只有當嵌套的DO OVER語句引用的每個數組定義不同的下標變量時才能使用嵌套DO OVER語句。 INFORMAT語句 INFORMAT語句把輸入格式與變量聯系起來。語句格式:INFORMAT variabl
18、es ;選項說明: 選項DEFAULT可以出現在INFORMAT語句中的任何位置,僅適用于當前的DATA步。沒有規定臨時的缺省輸入格式時,使用SAS系統規定的缺省輸入格式。 例9.23 規定臨時的缺省輸入格式。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沒有規定輸入格式,那么使用這里規定的缺
19、省輸入格式,即用格式3.1輸入X1-X5,用格式$char4.輸入NAME.例9.23 取消已存在的輸入格式。data a;set ResDat.idx000001;informat date;run;例中,刪除變量DATE的輸入格式。這里INFORMAT和SET語句的次序是重要的。 FORMAT語句 語句格式:FORMAT variables ;選項說明:選項DEFAULT可以出現在FORMAT語句中的任何位置,僅適用于當前的DATA步。沒有規定臨時的缺省輸出格式時,使用SAS系統規定的缺省輸入格式。 例9.25 規定臨時的缺省輸出格式。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 規定日期時間變量的輸出格式。data a;input name $ bdate date7.;format bdate worddate.;cards;jimmy 15jan84cindy 03mar85;proc print;run;如果沒有FORMAT語句,表示日期變量date的值將用1960年1月1日和日期值之間的天數輸出。因此,對
21、于SAS日期時間值變量,必須用FORMAT語句對變量指定相應的日期時間輸出格式,這樣才能便于理解。 Obs name bdate1 jimmy January 15, 19842 cindy March 3, 1985LENGTH語句 LENGTH語句用于規定存貯變量值的字節長度。語句格式 LENGTHvariable-specification-1 ;其中: variable-specification變量說明項; DEFAULT=n規定新創建數值變量值的缺省字節長度從8改為n值。 variable-specification選項的格式 變量說明項格式:variable-1length相關選
22、項說明: 控制變量長度方法 用LENGTH語句或ATTRIB語句都可以指定變量的長度。任意一個用LENGTH語句規定的長度可以用ATTRIB語句改變它,反之亦然。變量的長度依賴于: 是數值還是字符變量; 變量是如何創建的; 有沒有LENGTH或ATTRIB語句。 數值變量長度控制 在SAS數據集中數值變量的存貯長度一般為8個字節(byte)。然而很多值可以用小于8個字節的長度準確地表示。當數據集很大時,使用小于8個字節長度來存貯不需要很精確的值時,可以有效地減少外部存貯的要求。注意:用LENGTH語句截短數據時,可能會引起誤差。 例9.28 截短數據引起的誤差問題。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;例中,數據集TWO中沒有觀測。因為,第二個DATA步的子集IF語句中的常數1.3用8個字節表示, 而數據集ONE中變量A按LENGTH語句規定只有3個字節, 因此A不會等于1.3.字符變量長度控制 如果不用LENGTH或ATTRIB語句規定變量的長度,字符變量的缺省長由它的第一個觀測值決定,這樣,后面更長的觀測值會被截短。因INPUT語句可隱含地說明字符變量的長度。所以,當LENGTH語句定
24、義的字符長度不同于在INPUT語句中隱含表示的長度時,LENGTH語句應放在INPUT語句前面。 例9.29 LENGTH語句必須放在INPUT語句前面才能起作用。data a;length name $20;input name $1-10;cards;(數據行);run;例中,INPUT語句隱含指定變量NAME的長度為10。LENGTH語句(放在INPUT語句前面)給出在創建的數據集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中出現時,它的長度被確定為2。于是,當把YES賦給Y時,僅前兩個字符被存儲,S丟失了。為解決該問題,或者使用LENGTH語句規定Y的長度,或者重新排列語句順序。 xy11no25yeLENGTH語句位置的重要性 改變字符變量的長度時,LENGTH語句必須放在SET語句的前面; 改變數值變量的長度時,LENGTH語句可以放在任何地方。 例9.30 SET語句之后的LENGTH語句對字符變量不起作用。data a;lstknm=深發展;data b;lstknm=大秦鐵路;data c;set a b;length lstknm $12 ; proc print; run
26、;例中,length語句放在set語句之后不起作用,lstknm的長度為6,所以顯示的值分別為深發展和大秦鐵 。 Obs lstknm 1 深發展 2 大秦鐵上段程序的正確寫法:data a;lstknm=深發展;data b;lstknm=大秦鐵路;data c;length lstknm $12 ; /*length語句放在set語句之前 */set a b;proc print; /*顯示正確結果 */run; Obs lstknm 1 深發展 2 大秦鐵路LABEL語句 LABEL語句用于為變量加標簽。變量標簽是對變量的進一步說明,看到標簽就能理解變量的意思。這個標簽在SAS數據集中同
27、變量名一起被存貯,而且可通過許多SAS過程被打印輸出。語句格式:LABEL variable-1=label-1 ;其中: Variable規定加標簽的變量名; Label規定最多40個字符的標簽。一個標簽語句可以出現若干個變量名和標簽。例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 刪除變量的標簽。Label scode= hstocd= shrsdt= shrout=;ATTRIB語句 ATTARIB語句用于規定多個變量的輸出格式,輸入格式,標簽和長度。 語句格式 ATTRIB variable-list-1 attribute-list
29、-1;其中:variable-list規定要定義屬性的變量列表;attribute-list規定變量屬性列表。 可以規定的變量屬性 ATTRIB語句可以規定的變量屬性有: FORMATformat規定輸出格式; INFORMAT=informat規定輸入格式; LABEL=label規定標簽; LENGTH=length規定長度。字符變量前面加$。ATTRIB語句永久地為變量規定了屬性。可以用FORMAT,INFORMAT,LABEL,和LENGTH語句來指定變量的屬性。用ATTRIB語句指定的任何屬性都可以用多個屬性的語句改變它,反之亦然。 應用舉例 例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語句規定輸出數據集中要刪除的變量,它對DATA步正在創建的所有SAS數據集都適用。語句格式:DROP variable-list;其中:varible-list規定輸出數據集中要刪除的變量。 例9.39 Drop語句與數據集中的drop=選項 。data a;set ResDat.class;drop sex age; /* drop語句 */ proc print;run;data a (drop=sex age); /* 數據集中的drop=選項 */ set ResDat.class;proc print
32、;run;例中,兩段程序的效果相同。DROP語句告訴SAS系統新建數據集A中將刪除SEX 和AGE兩個變量。 KEEP語句 KEEP語句規定輸出數據中要保留的變量,它對DATA步正在創建的所有SAS數據集都適用。語句格式:KEEP variable-list;其中:variable-list規定輸出數據集中要保留的變量。 例9.40 Keep語句與數據集中的keep=選項 。data a;set ResDat.idx000001;keep date clpr; /* keep語句 */ proc print data=a (obs=10);run;data a (keep=date clpr)
33、; /* 數據集中的keep=選項 */set ResDat.idx000001;proc print data=a (obs=10);run;DROP和KEEP語句使用規則 同一個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: 從數據集 RESDAT.IDX000001 讀取了 3891 個觀測。NOTE: 數據集 WORK.A 有 3891 個觀測和 1 個
35、變量。數據集選項DROP=和KEEP=使用規則 數據集選項drop=和keep=的使用規則基本同drop和keep語句的使用規則。但更靈活,實現同樣的功能,對于不同的數據集,新舊名的使用規則也不同 。RENAME語句 RENAME語句可以更改多個變量的名字。語句格式:RENAME old-name-1=new-name-1 ;其中: old-name規定輸入數據集中出現的變量名字; new-name規定變量的新名字。由于變量的新名字在輸出的數據集中才起作用,所以,在當前DATA步的程序語句須使用老名字。例9.45 應用舉例。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語句來規定單個變量,變量列表,或數組元素的初始值。語句格式:RETAINelement-list-1element-list-n;選項說明:例9.46 沒有選項時,規定用INPUT語句或賦值語句創建的所有變量值從DATA步的這次執行到下一次重復時被保留。于是數據值在一些觀測中可能保留了本應為缺失值的其它值。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;打印輸出結果為:例中,當ID的值為1或2時,都是對的。但當ID等于1和2以外的值時,沒有一個IF條件是真的,故TEST沒有接收新的值。由于有RETAIN語句,所以,TEST就保持從上一觀測中得到的值,這樣就產生錯誤。若從這段程序刪除RETAIN語句,當ID值不等于1或2時TEST的值為空格(缺失值).data a; 打印輸出結果為: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_規定變量列表時,只有在RETAIN語句之前定義的變量才有效。第11章 全局通用語句清華大學經管學院 朱世武ZhushwResdat樣本數據:SAS論壇: 全局通用語句是可以用在任何地方的SAS語句。這些語句既可以用在數據步(DATA步),也可以用在過程步(PROC步),甚至還可以單獨使用。 注釋語句 注釋語句可以放在SAS程序的任何地方作為程序的說明,或者介紹整個程序的步驟或算法等。語句格式格式一:* message;信息的
39、長度可任意,但不能包含分號(;),最后的分號表示信息結束。 格式二:/*message*/中間的信息可以包含分號,但這種形式的注釋不能嵌套。應用舉例 例11.1 注釋語句應用。proc print data=ResDat.stk000002 (obs=10) noobs; /*輸出前10個觀測,不輸出觀測序號*/var oppr hipr lopr clpr;title股票行情;run;proc means data=ResDat.stk000002 ; *對數據集ResDat.stk000002使用means過程;var oppr hipr lopr clpr; /*輸出變量oppr hip
40、r lopr clpr的均值*/run;例11.2 標準SAS程序開頭,記錄SAS程序信息的注釋形式。/*/ /* Begin Estimation for Grunfelds Investment Models */ /* See SAS/ETS Users Guide, Version 5 Edition, */ /* pages */ /*/ X語句 運行SAS系統時,發布主機操作系統命令。語句格式:X ;其中:command規定主機操作系統的命令。例11.8 應用舉例。x mkdir d:ResDat1;libname ResDat1 d:ResDat1;data ResDat1.cl
41、ass;set ResDat.class;run;例中,在SAS會話期間用主機操作系統命令創建一個目錄D:ResDat_3.注意:鍵入EXIT命令退出操作系統返回到SAS會話。TITLE語句 TITLE語句規定SAS輸出文件和其它SAS輸出標題。每一個TITLE語規定一級標題,最多可規定10級標題。語句格式:TITLE;其中: n緊跟在詞TIILE后面(不能有空格)的數字,用來規定標題的級別; text規定標題的內容。規定標題的內容一直有效,但可以重新規定或取消。例11.9 只規定第1和第5級標題的內容時,中間標題為空白。title this is the 1th title line;tit
42、le5 this is the 5th title line;例11.10 取消所有標題內容。title; 例11.11 取消第3級及以后的所有標題內容。title3;FOOTNOTE語句 FOOTNOTE語句在每一頁的底部輸出一些腳注行。最多可產生10個腳注行。語句格式:FOOTNOTE;其中: n緊跟在詞FOOTNOTE后面(不能有空格)的數字,用來規定腳注的行號; text規定腳注行的內容。規定的腳注行內容將輸出在所有過程的輸出頁上,但可以重新規定或取消。例11.12 規定腳注。footnote 清華大學金融系;例11.13 取消所有已規定的腳注行。footnote;例11.14 取消第
43、3個及以后的所有腳注行。footnote3; RUN語句 RUN語句使SAS程序被執行。語句格式:RUN ;其中:CANCEL讓SAS系統結束當前步的執行。SAS將輸出一個信息說明這一步沒有執行。但CANECL選項不能阻止包含CARDS或CARDS4語句的DATA步執行。例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語之前執行PROC MEANS步。如果省略第一個RUN語,SAS系統在它讀PROC PLOT語句之后執行PROC MEANS步。這時第二個TITLE語覆蓋第一個TITLE語,也就是兩個過程的輸出都包含了標題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; /*注意數據集中沒有變量X */run cancel;例中,當發現SAS程序有錯誤不能運行這一段序時,使用選項CANCEL結束當前步的執行。LIBNAME語句 L
46、IBNAME語句定義SAS邏輯庫。 LIBNAME語句把一個libref(庫標記名)和一個目錄名聯系起來,使用戶可在SAS語句中使用庫標記來指示這個目錄。語句格式 LIBNAME libref ;LIBNAME libref Clear;LIBNAME libref |_ All_ List;三種格式反映了LIBNAME語句的三種用法。選項說明 應用舉例 例11.18 LIBNAME規定不同引擎的邏輯庫。libname SASDB1 tape SAS- data-library; /*規定一個TAPE引擎*/libname SASDB2 V6 SAS- data-library; /*規定版本
47、為V6引擎*/libname SASDB3 ODBC SAS- data-library; /*規定版本為ODBC引擎*/例11.19 不同引擎的邏輯庫數據集的轉換。libname ResDatv6 v6 D:ResDat;data ResDatv6.class;set ResDat.class;run;例11.20 對已經存在的邏輯庫使用LIBNAME語句聯系一個SAS引擎。libname SASDB3 ODBC;例11.21 一個物理地址聯系兩個庫標記。libname ResDat1 D:ResDat;libname ResDat2 D:ResDat;run;例11.23 脫離與庫標記的聯
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的文件標記與外部文件的全名或輸出設備聯系起來。 用INFILE,FILE,或%INCLUDE語句中調用S
49、AS文件前,要先使用FILENAME語句來定義文件。 用戶可以把一個文件標記同單個外部文件建立聯系,也可以很多外部文件建立聯系。 文件標記和文件名字之間的聯系只保持在SAS會話期間,或下一個FILENAME語句再定義前。語句格式 建立文件標記與外部文件的聯系:FILENAME fileref external-file;清除文件標記與外部文件的聯系:FILENAME fileref|_ALL_CLEAR;建立文件標記與某個輸出設備的聯系:FILENAME fileref device-type;列出外部文件的屬性:FILENAME fileref|_ALL_LIST;其它格式:FILENAME fileref CATALOG catalog;FILENAME fileref
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校洗臉池管理制度
- 學校美發室管理制度
- 學校隔離點管理制度
- 學生早到校管理制度
- 孵化園設備管理制度
- 安全用蒸汽管理制度
- 安明措施費管理制度
- 安置點安全管理制度
- 實訓室發放管理制度
- 實驗試劑庫管理制度
- 2025年高壓電工作業考試國家總局題庫及答案(共280題)
- 2024年03月安徽省農業信貸融資擔保有限公司2024年招考筆試歷年參考題庫附帶答案詳解
- DB12T 692-2016 天津市文書類電子文件元數據規范
- T-ACEF 148-2024 危險廢物物聯網智能監控設備技術要求
- 門店規章制度守則范本
- 工地交通安全
- 【MOOC】多媒體技術與應用-同濟大學 中國大學慕課MOOC答案
- 高等數學基礎-002-國開機考復習資料
- 2024年1月云南高中學業水平考試數學試卷真題(含答案詳解)
- 大模型原理與技術-課件 chap10 多模態大模型
- 高績效教練讀書分享
評論
0/150
提交評論