SAS(十一)DATA步--信息語句
數組(array)語句
- 當需要用同一種方法處理很多變量時,可以用數組語句定義這組變量爲某個數組中的元素。
- 1.顯示下標array語句:由一個數組名字,在數組中元素個數的說明,及元素列表組成。
- 2.隱含下標array語句:由一個數組名字、一個下標變量和列表名組成。
- 形如:
例 array simple{3} red green yellow;
array x{5,3} score1-score15;
array c{3}等價於array c{3} c1-c3
array test{3} t1 t2 t3 (90 80 70)
數組中的變量必須全是數值型或字符串型,array例
- 規定數組中每一維的上下界:
array x{1:5,1:3} score1-score15;
- {*}表示SAS系統通過數組中變量的個數來確定下標。可用dim(數組名)函數計算數組元素個數。
- _temporary_建立一個臨時數組元素列表
data zz;
input d1-d7;
array day(*) d1-d7;
do i=1 to dim(day);
day(i)=day(i)+10;
end;
drop i;
cards;
99 11 22 222 22 3 44
1 2 3 4 5 6 7
;
run;
PROC PRINT;RUN;
data a;
input x1-x5;
cards;
1 2 3 4 5
2 3 4 5 6
4 5 6 7 8
;
run;
data b;
set a;
array test(5) x1-x5;
prod=0;
do i=1 to dim(test)-1;
if i=1 then prod=test(i);
prod=prod*test(i+1);
end;
proc print;
run;
data a;
input var1 var2 var3;
cards;
10 20 30
100 . 300
. 40 400
;
run;
data b(drop=i);
set a;
array array1(3) _TEMPORARY_ (.1 .2 .3) ;
array array2(3) var1 var2 var3;/*把a數據集中的多個變量用數組來表示*/
do i=1 to 3;
if array2(i)=. then array2(i)=array1(i);
end;
proc print;
run;
- 形如:ARRAY array-name <(index-variable)> <$> array-elements <(initial-values)>
- 如果沒有規定下標變量,SAS系統使用自動變量_i_作爲下標變量,下標變量範圍從1到這個數組元素的個數
如:array x x1-x5
data test;
input sco1-sco5;
array s sco1-sco5;
do _i_ =1 to 5;
s=s*100;
end;
cards;
0.95 0.88 0.57 0.90 0.65
1 2 3 4 5
;
run;
PROC PRINT;RUN;
Do over語句
- Do over 語句對每個數組元素自動地執行Do組中的語句,它等價於 do i=1 to k;
其中i是這個數組的下標變量,k是數組元素的個數。
- Do over語句常用在對隱含下標數組元素執行Do組裏的語句
data test;
input sc01-sc05;
array s sc01-sc05;
do over s;
s=s*100;
end;
cards;
0.95 0.88 0.57 0.90 0.65
1 2 3 4 5
;
PROC PRINT;
RUN;
Informat語句
- Informat語句把輸入格式與變量聯繫起來,在data步,可以用informat語句對input語句中列出的變量規定缺省時的輸入格式
data infex;
informat default=3.1 default=$char4. x1 2.2;
/*數值的輸入格式忽略w.d格式中w的值*/
input x1-x5 name $;
file print;
put x1-x5 name;
cards;
1111 22 33 4444 100 Johnny
;
run;
Format語句
- 在data步把變量同輸出格式聯繫起來
- 可以規定缺省選項,如:
data;
informat a dollar9.;/*必須指定,否則不能識別數據*/
format a comma9.;
input a @@;
cards;
$1900000
;
run;
proc print;
run;
data ff;
format header $7. name $8.;
input header= name=;
cards;
header=zxs zjy name=zhou aaa
header=123 name=aaa
;
run;
proc print;
run;
Drop和keep語句
- Drop語句:刪掉變量語句
drop variable-list
- Keep語句:保留變量語句
keep variable-list
- 雖然出現在drop和keep語句中的變量不包含在正被創建的SAS數據集中,但這些變量仍可以用在程序語句中
- Drop和keep不能同時使用
Retain語句
- 使用retain給變量賦予初值,並保留到讀下一個觀測
retain var1-var4 (1,2,3,4)
當retain後無變量時,用input或賦值語句創建的所有變量的值,保留上次data步執行的值
data retire;
input amount @@;
retain year 1994 total 0;
year=year+1;
total=total+amount;/*total=sum(total,amount)*/
/*可用下列語句代替
retain year 1994;
year+1;
total+amount;*/
cards;
500 1000 1500 2200 2700
;
run;
proc print;
run;
data group;
input x;
retain;
if x=1 then sex='M';
if x=2 then sex='F';
cards;
1
2
3
2
;
run;
proc print;
run;
Attrib語句
- 在data步內允許用一個attrib語句來規定一個或幾個變量的輸出、輸入格式,標籤和長度,即規定變量屬性
- Attrib x label=‘中國載人飛船’
informat=8.5
format=8.2;
data a;
input x @@;
attrib x label='中國載人飛船'
length=8
informat=comma8.
format=dollar12.;
cards;
12,345,678
;
run;
proc print;
run;
Window語句
- 創建用戶專用的窗口,可用來顯示文字說明或接受輸入的數據
data _null_;
window start
#5 @26 'welcome to the sas system' color=yellow
#7 @19 'this program creates two sas data sets'
#8 @26 'and uses three procedures'
#12 @27 'press enter to continue';
display start;
stop;
run;