SAS的数组array介绍
SAS可以把一組同為數(shù)值型或同為字符型的變量合在一起,使用同一個名字稱呼,用下標來區(qū)分。這與通常的程序設(shè)計語言中的數(shù)組略有區(qū)別,通常的程序設(shè)計語言中數(shù)組元素沒有對應(yīng)的變量名,而SAS數(shù)組每個元素都有自己的變量名。
??????????? 一、數(shù)值型數(shù)組
??????????? 定義數(shù)值型數(shù)組的格式為:
?? ARRAY 數(shù)組名(維數(shù)說明) 數(shù)組元素名列表(初始值表);
例如:
ARRAY tests(3) math chinese english (0, 0, 0);
數(shù)組名是一個合法的SAS名字且不能與同一數(shù)據(jù)步中的變量重名。對一維數(shù)組,維數(shù)說明只要說明元素個數(shù),這時下標從1開始。數(shù)組元素名列表列出這個數(shù)組的各個元素實際代表的變量名,各變量名以空格分隔。比如,上例中tests(1)代表數(shù)學成績,tests(2)代表語文成績,tests(3)代表英語成績。初始值表給各數(shù)組元素賦初值,按順序?qū)?yīng)。
??????????? 數(shù)組說明中初始值表可以省略,這時其初始值為相應(yīng)數(shù)組元素的值(如果其數(shù)組元素還沒有值則初值為缺失值)。
??????????? 數(shù)組說明中的數(shù)組元素名列表可以省略,這時其元素也有對應(yīng)的變量名,變量名為數(shù)組名后附加序號,比如:
ARRAY x(3);
中數(shù)組x的各元素名為x1,x2,x3。
??????????? 也可以在說明維數(shù)時用“下標下界:下標上界”來說明一個其它的下標下界,如
ARRAY sales(95:97) yr95-yr97 ;
這時sales(95)為yr95,sales(96)為yr96,sales(97)為yr97。上面的變量名列表是一種特殊的語法,在用到變量名列表時如果連續(xù)寫幾個前面字母相同,后面是連續(xù)的序號的變量,只要寫出第一個和最后一個,中間用減號連接。
??????????? 一維數(shù)組的維數(shù)說明還可以是一個星號,這時數(shù)組大小由提供的元素列表中的變量個數(shù)決定,如上面的數(shù)組tests可以等價地說明為:
ARRAY tests(*) math chinese english (0, 0, 0);
可以用函數(shù)DIM(數(shù)組名)來獲得數(shù)組的長度。
??????????? 可以定義二維數(shù)值型數(shù)組,只要在維數(shù)說明中指定用逗號分開的兩個下標界說明,例如:
array table(2,2) x11 x12 x21 x22;
說明table(1,1)為x11,table(1,2)為x12,table(2,1)為x21,table(2,2)為x22。二維數(shù)組元素按行排列。
??????????? 二、字符型數(shù)組
??????????? 定義字符型數(shù)組的語法略復(fù)雜,它需要加一個$符來說明數(shù)組元素類型為字符型,并且要說明每一元素所能存儲的字符串的最大長度。說明格式如下:
ARRAY 數(shù)組名(維數(shù)說明) $ 元素長度說明 數(shù)組元素名列表 (初始值表);
例如:
ARRAY names(3) $ 10 child father mother;
字符型數(shù)組其它方面用法與數(shù)值型相同。
??????????? 三、臨時數(shù)組
??????????? 上面格式說明的數(shù)組都是把若干個變量集合在一起使用同一個數(shù)組名稱呼,每個數(shù)組元素是一個獨立的變量。SAS也提供了與其它程序設(shè)計語言相同的數(shù)組,即數(shù)組元素只由數(shù)組名和序號決定,沒有對應(yīng)的變量名。這種數(shù)組叫做臨時數(shù)組,定義格式為:
ARRAY 數(shù)組名(維數(shù)說明) _TEMPORARY_ (初始值表);
可見臨時數(shù)組就是在數(shù)組說明中用_TEMPORARY_代替了數(shù)組元素列表。例如:
ARRAY x(3) _TEMPORARY_ (0, 0, 0);
說明了一個有三個元素的臨時數(shù)組x。其元素為x(1),x(2),x(3),即使變量x1,x2,x3
??????????? 存在也與此數(shù)組無關(guān)。臨時數(shù)組的特點是它只用于中間計算,最終不被寫入數(shù)據(jù)集。并且臨時數(shù)組與其它變量不同的是,它在數(shù)據(jù)步隱含循環(huán)(后面會解釋此概念)中能自動保留上一步得到的值。臨時數(shù)組當然也可以有多維數(shù)組,或字符型數(shù)組。
??????????? 四、使用數(shù)組
??????????? 臨時數(shù)組的使用與其它程序設(shè)計語言中的數(shù)組作用相同,可以存放性質(zhì)類似的數(shù)據(jù)進行處理。SAS以變量為元素的數(shù)組可以方便變量的循環(huán)處理,比如,讀入了comp1-comp10
??????????? 十個計算機銷售額變量,prin1-prin6六個打印機銷售額變量,希望計算其總和,可以用如下的數(shù)組說明與DO循環(huán)配合進行:
data sales;
input comp1-comp10 prin1-prin6;
ARRAY y(*) comp1-comp10 prin1-prin6;
tot=0;
do i=1 to DIM(y);
??? tot + y(i);
end;
cards;
………
;
run;
此例中數(shù)組說明用了星號說明維數(shù),求總和時用了累加語句。事實上,在數(shù)組說明的數(shù)組元素列表部分除了列出具體的變量名表外,還可以用特殊名字_NUMERIC_代表所有數(shù)值型變量的列表,用_CHARACTER_代表所有字符型變量的列表,用_ALL_代表所有變量的列表(用_ALL_
??????????? 時所有變量應(yīng)該同為數(shù)值型或同為字符型,否則出錯)。所以上例中的數(shù)組y的說明中還可以用_NUMERIC_或_ALL_代替變量名列表。
??????????? 實際上,SAS為變量累加提供了一個專門的函數(shù)SUM(OF …),比如上面的tot變量可以用SUM(OF comp1-comp12
??????????? prin1-prin6)計算。這個例子主要為說明如何循環(huán)處理多個變量。
總結(jié)
以上是生活随笔為你收集整理的SAS的数组array介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CALL SYMPUT与CALL SYM
- 下一篇: 很全的sas基础知识