SAS中的array介紹

SAS可以把一組同爲數值型或同爲字符型的變量合在一起,使用同一個名字稱呼,用下標來區分。這與通常的程序設計語言中的數組略有區別,通常的程序設計語言中數組元素沒有對應的變量名,而SAS數組每個元素都有自己的變量名。

            一、數值型數組
            定義數值型數組的格式爲:
   ARRAY 數組名(維數說明) 數組元素名列表(初始值表);
例如:
ARRAY tests(3) math chinese english (0, 0, 0);
數組名是一個合法的SAS名字且不能與同一數據步中的變量重名。對一維數組,維數說明只要說明元素個數,這時下標從1開始。數組元素名列表列出這個數組的各個元素實際代表的變量名,各變量名以空格分隔。比如,上例中tests(1)代表數學成績,tests(2)代表語文成績,tests(3)代表英語成績。初始值表給各數組元素賦初值,按順序對應。
            數組說明中初始值表可以省略,這時其初始值爲相應數組元素的值(如果其數組元素還沒有值則初值爲缺失值)。
            數組說明中的數組元素名列表可以省略,這時其元素也有對應的變量名,變量名爲數組名後附加序號,比如:
ARRAY x(3);
中數組x的各元素名爲x1,x2,x3。
            也可以在說明維數時用“下標下界:下標上界”來說明一個其它的下標下界,如
ARRAY sales(95:97) yr95-yr97 ;
這時sales(95)爲yr95,sales(96)爲yr96,sales(97)爲yr97。上面的變量名列表是一種特殊的語法,在用到變量名列表時如果連續寫幾個前面字母相同,後面是連續的序號的變量,只要寫出第一個和最後一個,中間用減號連接。
            一維數組的維數說明還可以是一個星號,這時數組大小由提供的元素列表中的變量個數決定,如上面的數組tests可以等價地說明爲:
ARRAY tests(*) math chinese english (0, 0, 0);
可以用函數DIM(數組名)來獲得數組的長度。
            可以定義二維數值型數組,只要在維數說明中指定用逗號分開的兩個下標界說明,例如:
array table(2,2) x11 x12 x21 x22;
說明table(1,1)爲x11,table(1,2)爲x12,table(2,1)爲x21,table(2,2)爲x22。二維數組元素按行排列。
            二、字符型數組
            定義字符型數組的語法略複雜,它需要加一個$符來說明數組元素類型爲字符型,並且要說明每一元素所能存儲的字符串的最大長度。說明格式如下:
ARRAY 數組名(維數說明) $ 元素長度說明 數組元素名列表 (初始值表);
例如:
ARRAY names(3) $ 10 child father mother;
字符型數組其它方面用法與數值型相同。
            三、臨時數組
            上面格式說明的數組都是把若干個變量集合在一起使用同一個數組名稱呼,每個數組元素是一個獨立的變量。SAS也提供了與其它程序設計語言相同的數組,即數組元素只由數組名和序號決定,沒有對應的變量名。這種數組叫做臨時數組,定義格式爲:
ARRAY 數組名(維數說明) _TEMPORARY_ (初始值表);
可見臨時數組就是在數組說明中用_TEMPORARY_代替了數組元素列表。例如:
ARRAY x(3) _TEMPORARY_ (0, 0, 0);
說明了一個有三個元素的臨時數組x。其元素爲x(1),x(2),x(3),即使變量x1,x2,x3
            存在也與此數組無關。臨時數組的特點是它只用於中間計算,最終不被寫入數據集。並且臨時數組與其它變量不同的是,它在數據步隱含循環(後面會解釋此概念)中能自動保留上一步得到的值。臨時數組當然也可以有多維數組,或字符型數組。
            四、使用數組
            臨時數組的使用與其它程序設計語言中的數組作用相同,可以存放性質類似的數據進行處理。SAS以變量爲元素的數組可以方便變量的循環處理,比如,讀入了comp1-comp10
            十個計算機銷售額變量,prin1-prin6六個打印機銷售額變量,希望計算其總和,可以用如下的數組說明與DO循環配合進行:
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;

此例中數組說明用了星號說明維數,求總和時用了累加語句。事實上,在數組說明的數組元素列表部分除了列出具體的變量名錶外,還可以用特殊名字_NUMERIC_代表所有數值型變量的列表,用_CHARACTER_代表所有字符型變量的列表,用_ALL_代表所有變量的列表(用_ALL_
            時所有變量應該同爲數值型或同爲字符型,否則出錯)。所以上例中的數組y的說明中還可以用_NUMERIC_或_ALL_代替變量名列表。
            實際上,SAS爲變量累加提供了一個專門的函數SUM(OF …),比如上面的tot變量可以用SUM(OF comp1-comp12
            prin1-prin6)計算。這個例子主要爲說明如何循環處理多個變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章