iml小冊華東師范金融與統(tǒng)計學(xué)院_第1頁
iml小冊華東師范金融與統(tǒng)計學(xué)院_第2頁
iml小冊華東師范金融與統(tǒng)計學(xué)院_第3頁
iml小冊華東師范金融與統(tǒng)計學(xué)院_第4頁
iml小冊華東師范金融與統(tǒng)計學(xué)院_第5頁
免費預(yù)覽已結(jié)束,剩余21頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、SAS/IML 小冊200062華東師范大學(xué)金融與統(tǒng)計學(xué)院簡介1SAA/IML(eractive Matrix Language, 交互式矩陣語言)功能強大,在整個 SAS 系統(tǒng)中不可或缺,可以將整個數(shù)據(jù)集或部分的轉(zhuǎn)為矩陣來處理, 同時也可以生成你想要的矩陣或者數(shù)據(jù)集。SAS/IML 作為一門編程語言,處理的最基本的元素是二維的數(shù)值型或字符型矩陣,矩陣命名的規(guī)則同 base sas 中一般變量名, 在此從略。你可以在任何時候改變一個矩陣的類型,維數(shù)以及具體元素的值,這里除了最基本的運算符外, 還有相當(dāng)廣泛的函數(shù)和完整的控制語句。并且你可以自己定義函數(shù)。你將使用的結(jié)束。作為 iml 模塊的開始,

2、使用作為 iml 模塊下面從最基本的算符開始介紹。(一). 對矩陣元素進(jìn)行運算。1.+(addition operator)M1 + M2M + S將矩陣中相應(yīng)元素相加,基本格式為:其中 M, M1, M2, 為 matrix 的簡寫,S 為 scalar 的簡寫, 矩陣與單個數(shù)字的運算代表矩陣中每個元素與該數(shù)作運算, 下舉一例(左邊為程序,右邊為 SAS 實際輸出結(jié)果)。1The SAS SystemC2345a=1 2,3 4;b=1 1,1 1;c=a+b;quit;proc iml;2.-(subtraction operator)M1 M2M S將矩陣中相應(yīng)元素相減,基本格式為:例:

3、3.#(multiplication operator)M1#M2M #S M #V將矩陣中相應(yīng)元素相乘,基本格式為:其中,V例 (1):為 vector 的簡寫,例 (2):4.#(er operator)M1#M2M #S將矩陣中相應(yīng)元素乘方,基本格式為:2The SAS SystemC1020300400a=1 2,3 4;b=10,100;c=a#b;The SAS SystemC416020a=1 2,3 4;b=4 8,0 5;c=a#b;The SAS System C0123a=1 2,3 4; b=1 ;c=a-b;例 (1):例 (2):M1/M2M/S將矩陣中相應(yīng)元素相除

4、,基本格式為:例:(kronecker 積)6.將矩陣中相應(yīng)元素乘方,基本格式為: M1M2例: =(comparison operator)7.=3The SAS System C02040608a=1 2,3 4;b=0 2;c=ab;The SAS SystemC4401.25a=1 2,3 4;b=4 8,0 5;c=b/a;a=1 2,The SAS System CThe SAS SystemC125611024a=1 2,3 4;b=4 8,0 5;c=a#b;將矩陣中相應(yīng)元素進(jìn)行比較運算,所得結(jié)果也是一個矩陣,當(dāng)矩陣中相應(yīng)元素滿足比較關(guān)系式時,結(jié)果為 1, 否則為 0.M1 M

5、2M S本格式為:例:注:當(dāng)比較運算符用與條件語句時,所得結(jié)果必須元素全為 1,條件才作成立,如: if x y then 此時可以在條件前用 any, all 來進(jìn)一步描述,00any00 (if any(x y) then ) 適用于比較結(jié)果元素只要有一個為非零,條件即成立;00all00(if all(x y) then ) 適用于比較結(jié)果所有元素非零時,條件才成立。(elementum(minimum) operator)8.取出矩陣中對應(yīng)元素較大的(或較小的)作為所得矩陣的元素,基本M1 M2M S格式為:例:(logical operator)9.& |MM1&M2M1|M2對矩陣

6、相應(yīng)元素進(jìn)行邏輯運算,本格式為:M &SM |S0000&適用于所得結(jié)果為 1 當(dāng)且僅當(dāng) M1, M2(S)對應(yīng)元素都非零,其余情況為 0;00 | 00適用于所得結(jié)果為 01 當(dāng)且僅當(dāng)M1, M2(S) 中對應(yīng)元素都為零,其余情況為 1;00 00適用于所得結(jié)果為 1 當(dāng)且僅當(dāng) M 中對應(yīng)元素為 0,所得結(jié)果為 0 當(dāng)且僅當(dāng) M 中對應(yīng)元素為 1.4The SAS SystemC1278a=1 2,3 4;b=0 2,7 8;c=a b;The SAS SystemC0011a=1 2,3 4;b=0 2,7 8;c=a b;例 (1):例 (2):例 (3):(二). 矩陣運算符。(mul

7、tiplication operator)1.定義為矩陣相乘?;靖袷綖椋?M1 M2例 (1):例 (2):5The SAS SystemC6800a=0 0,3 4;b=0 2,7 0;c=b * a;The SAS SystemC00286a=0 0,3 4;b=0 2,7 0;c=a * b;a=0 0,3 4;d=a;The SAS System D1100The SAS SystemC0111a=0 0,3 4;b=0 2,7 0;c=a | b;The SAS SystemC0010a=0 0,3 4;b=0 2,7 0;c=a & b;(er operator)2.定義為矩陣乘

8、方。基本格式為:例:M S(concatenation operator)3.|水平連接符, 將兩個行數(shù)相等的矩陣水平連接。本格式為:M1|M2例:(concatenation operator)4./垂直連接符, 將兩個列數(shù)相等的矩陣垂直連接。M1/M2例:本格式為:5.用與矩陣轉(zhuǎn)置。一般位于鍵盤左上角,本格式為: M 例:鍵下方。6a=1 2,3 4;c=a ;The SAS System C1324esca=0 0,3 4;b=0 2,7 0;c=a / b;The SAS System C00340270The SAS SystemC00023470a=0 0,3 4;b=0 2,7

9、0;c=a | b;a=0 0,3 4;c=a * * 3;The SAS System C004864(index creation operation)6.:此算符用于生成例 (1):續(xù)的行向量,本格式為: S1 : S2可以發(fā)現(xiàn),它所生成的行向量的第一個元素為 S1, 第二個元素為 s1 + 1, 即依次下去, 直到所得的元素等于(或小于)S2, 當(dāng)然不能大于 S2.當(dāng) S1 大于 S2 時,生成的行向量依次遞減。這個算符同時也適用于字符型。例 (2):例 (3):(subscripts)7. 這是一個特殊的后置運算符,用處也很特別,需要好好掌握,式為:operand row, colu

10、mn本格其中,operand 一般為矩陣,row 用來表示選擇一行或者多行,column用來表示選擇一列或者多列。 因此,你可以通過靈活運用 (1). 表示矩陣的某一個特殊元素。例: 來7The SAS SystemC 6a=1 2 3,4 5 6,7 8 9;b=a 2,3;The SAS SystemCvar1var2var3var4var5proc iml ; c=var1 : var5 ; prc ;quit ;The SAS SystemC109876proc iml ; c=10 : 6 ;prc ; quit ;The SAS SystemC78910proc iml ; c=7

11、 : 10 ;prc ; quit ;a 2, 3 表示選取矩陣的第二行,第三列的元素。(2). 表示矩陣的某一行或某一列例 (1):a 1 , 表示選取矩陣的第一行,此時 column 不寫任何內(nèi)容。例 (2):a , 2 表示選取矩陣的第二列,此時 row 不寫任何內(nèi)容。(3). 表示矩陣?yán)旱哪承┰亟M成的矩陣,這是 (2) 的推廣。a 13, 1, 2 表示選取矩陣的第一、三行,第一、二列的那些元素,在花括弧內(nèi)可以使用 ”, ” 來分開所選的行或列, 也可以用空格來代替。(4). 特別地,當(dāng) 和前面的一部分運算符結(jié)合起來,可以對矩陣的行或列進(jìn)行相當(dāng)?shù)摹昂喕边\算。例 (1):運算符出現(xiàn)

12、在 row 處,表示相應(yīng)的運算是針對列的,在 column 處可以寫明是對哪些列進(jìn)行運算。略去表示對所有列都作運算。 此例中,+8The SAS SystemC121113a=0 1 2,5 4 3,7 6 8; c=a +, ;The SAS System C1278a=1 2 3,4 5 6,7 8 9;c=a 1 3,1, 2;a=1 2 3,4 5 6,7 8 9; b=a , 2;The SAS System C258The SAS SystemC123a=1 2 3,4 5 6,7 8 9; b=a 1 , ;出現(xiàn)在 row 處,column 處為空,表示對所有列的元素作加法運算,

13、結(jié)果為一個三維的行向量。 這個行向量的第一個數(shù) 12 代表矩陣 a 的第一列元素 0 + 5 + 7 所得的結(jié)果,其余依次類推。 當(dāng)運算符出現(xiàn)在 column處,表示相應(yīng)的運算是針對行的,類似的,在 row 處可以寫明是對哪些行進(jìn)行運算。略去表示對所有行都作運算。例 (2):此例中,# 出現(xiàn)在 column 處,row 處為 13,表示對一、三行的元素作乘法運算,結(jié)果為一個二維的列向量。 這個列向量的第一個數(shù) 0 代表矩陣 a 的第一行元素 0#1#2 所得的結(jié)果,其余依次類推.下面列出和 結(jié)合使用的常用運算符,并做相應(yīng)的解釋。這八個常用運算符中,, 分別是用來求最大值,最小值的,, : 分別

14、是用來求最大值,最小值的所處的標(biāo)號。 : 可以用來求均值,平方和可以用 # 來得到。例 (3):9a=0 1 2,5 4 3,7 6 8; c=a ,;The SAS System C313operator+ #: #action addition multiplicationum minimumindex ofum index of minimum meansum of squaresThe SAS System C0336a=0 1 2,5 4 3,7 6 8;c=a 1 3, #; 出現(xiàn)在 column 處,row 處為空,表示對所有行找出最大值的標(biāo)號,結(jié)果為一個三維的列向量。 這個列向

15、量的第一個數(shù)00300代表矩陣 a 的第一行中的最大值是這一行的第三個元素,其余依次類推. 如果在 有運算符,則表示對整個矩陣進(jìn)行運算求值。例 (4): 內(nèi)只: 在這里可以用來求均值,但語句中沒有表示針對哪些行或哪些列的描述,而是對矩陣的所有元素求均值。(0+1+2+5+4+3+7+6+8= 4)9例 (5): 在這里可以用來求最大值的標(biāo)號,面的例子中,它用來求了每一行的最大值的標(biāo)號, 而該語句中沒有表示針對哪些行或哪些列的描述,它是對矩陣的所有元素求最大值的標(biāo)號, 標(biāo)號從 1 開始記,按行進(jìn)行,所有前面的例子都是單個運算符對矩陣進(jìn)行作,也可以多個作按運算符出現(xiàn)的順序從左往右同時對矩陣的行列進(jìn)

16、行,例 (6):a , + 表示先進(jìn)行 row 處的 對每列求最大值, 得到一個三維的行向量 (7 18 6), 然后進(jìn)行 column 處的+ 對前一步所得結(jié)果求和 (7 + 18 + 6 = 31)。 a +, 表示先進(jìn)行 row 處的 + 對每列求和,10The SAS SystemCD3123a= 0 1 2,5 4 3,7 18 6; c=a ,+ ;d=a +, ;The SAS SystemC 8a=0 1 2,5 4 3,7 18 6; c=a ;The SAS SystemC 4a=0 1 2,5 4 3,7 6 8; c=a : ;得到一個三維的行向量 (12 23 11)

17、, 然后進(jìn)行 column 處的 對前一步所得結(jié)果求出最大值 23。例 (7):a , # 表示先對矩陣 a 的每列求出最大值,得到一個三維的行向量 (718 6),然后對所得結(jié)果進(jìn)行下步的相乘,得到結(jié)果為 7562函數(shù)和自定義模塊這一節(jié)將介紹用在 SAS/IML 中的所有可以使用的函數(shù),下面逐個進(jìn)行介紹。(一). 數(shù)字函數(shù)這類函數(shù)是針對矩陣的每一個元素進(jìn)行的,它們是例 (1)(取絕對值):11a=1 0 3,-3 4 5,0 -1 9;c=abs(a);The SAS System C103345019abs( )exp( )( )log( )mod( ) normal( ) sqrt( )

18、 uniform( )take the absolute value calculates the exponential truncate a valuetakes the natural logarithm computes the modulogenerates a pseudo-random normal deviate calculates the square rootgenerates pseudo-random uniform deviatesThe SAS SystemC 756a= 0 1 2,5 4 3,7 18 6; c=a , # ;abs( ) 是一個用來求絕對值的

19、函數(shù)。得到的結(jié)果為矩陣每個元素取絕對值。例 (2)(求 ex):例 (3)(取整):例 (4)(以自然數(shù) e 為底的對數(shù)):例 (5)(取余):mod(a, 3)除數(shù) 3 也可以是一個與 a 相與其相應(yīng)元素取余運算。列數(shù)的矩陣。表示矩陣 a12a=1 2 3,4 5 6,7 8 9;c=mod(a,3);The SAS System C120120120a=1 2 3,3 4 5,7 8 9;c=log(a);The SAS System C00.69314721.09861231.38629441.60943791.79175951.94591012.07944152.1972246a= 2

20、.7183120.0855,- 0.049854.5982 148.4132,10.36798103.0839;c=(a);The SAS System C2120054148108103a=1 0 3,-3 4 5,0 -1 9;c=exp(a);The SAS System C2.7183120.08550.049854.5982148.413210.36798103.0839例 (6)(取余):例 (7)(生成正態(tài)分布的隨機數(shù)):normal(seed) 生成均值為0, 方差為 1 的標(biāo)準(zhǔn)正態(tài)分布的偽隨機數(shù),生成的隨機數(shù)的維數(shù)同 seed 的維數(shù), 其元素是小于 231 1 的任意整數(shù),

21、當(dāng) seed 值為 0 時,表示系統(tǒng)具體時間將賦予 seed, 因此,此時 seed 是隨時變化的, 此例中,矩陣 C 僅為一個元素,因為它的 seed 是一個數(shù),而矩陣 D 為一個三行三列的矩陣, 因為它的 seed 是一個三行三列的矩陣。例 (8)(求平方根):13The SAS System C11.41421361.732050822.2360682.44948972.64575132.82842713a=1 2 3,4 5 6,7 8 9;c=sqrt(a); prc ;The SAS SystemCD1.804823-0.0799150.3965769-1.0833182.2382

22、944-0.6242320.5136577-0.086609-0.5941790.0318908proc iml; c=mormal(1); d=normal(1 2 3,4 5 6,7 8 9);prc d; quit;The SAS SystemC000010120a=1 2 3,4 5 6,7 8 9;b=1 1 1,2 2 2,3 3 3;c=mod(a,b);例 (9)(生成均勻分布的隨機數(shù)):uniform(seed) 生成均值為 (0, 1) 內(nèi)的均勻分布的偽隨機數(shù),生成的隨機數(shù)的維數(shù)同 seed 的維數(shù), 其元素是小于 231 1 的任意整數(shù), 當(dāng) seed 值為 0 時,表示

23、系統(tǒng)具體時間將賦予 seed, 因此,此時的, 此例中,矩陣 C 僅為一個元素,因為它的 seedseed 是隨時變化是一個數(shù),而矩陣 D 為一個三行三列的矩陣, 因為它的 seed 是一個三行三列的矩陣。(二). 矩陣查詢函數(shù)這類函數(shù)可以得到矩陣的行數(shù),列數(shù)及元素的信息,非常有用。它們是例 (1)(all,any):all 查詢矩陣的每一個元素,當(dāng)所有元素值大于 0 時,結(jié)果為 1, any 查詢矩陣的每一個元素,當(dāng)至少有一個元素值大于 0 時,結(jié)果為 1, 此例14The SAS SystemC1 C2 D1 D2 1010a=1 2 3,4 5 6,7 8 9;c1=all (a0);

24、c2=all (a1); d1=any(a1); d2=any(a9);all( )any( )loc( )ncol( ) nleng( ) nrow( )type( )checks for all nonzero elements checks for any nonzero elements finds nonzero elements of a matrixfinds the number of columns of a matrix finds the size of an elementsfinds the number of rows of a matrix determines

25、the type of a matrixThe SAS SystemCD0.18496260.97008870.39982430.25939860.92160260.96927730.54297920.53169170.0497940.0665666proc iml; c=uniform(1); d=uniform(1 2 3,4 5 6,7 8 9);prc d; quit;中矩陣 a 的所有元素都大于 0, 因此 all (a 0) 的值為 1; 而 a1, 1 = 1不大于 1, 所以 all (a 1) 的值為 0, 對于 any( ), 只要矩陣中有一個元素值大于 1, any(a

26、1) 的值即為 1, 而矩陣 a所有元素值都不大于 9,故 any (a 9) 的值即為 0。例 (2)(loc):函數(shù) loc( ) 可以產(chǎn)生一個 1 n 的行向量,n 表示矩陣 a 中不為 0 的元素的個數(shù),這個行向量的第一個數(shù)代表矩陣 a 的第一個不為 0 的元素的標(biāo)號, 第二個數(shù)代表矩陣 a 的第二個不為 0 的元素的標(biāo)號,其余依次類推。 此例中,矩陣的 6 個元素中,第 1, 3, 4, 5 個元素非 0, 而第 2, 6個元素為 0, 故結(jié)果為一個 1 4 的行向量 (1 3 4 5),4 表示矩陣 a 共有四個元素非 0. 通過 loc( ) 產(chǎn)生的這個行向量。 可以輕易求出由矩

27、陣中滿足一定條件的元素組成的矩陣,如下例中,求出列向量的所有大于 0的元素。例 (3)(loc 的進(jìn)一步運用):例 (2)(nrow,ncol,nleng):矩陣 a 是一個二行三列的矩陣,nrow( ) 求出行數(shù), 等于 2,ncol( ) 求出列數(shù), 等于 3, 數(shù)值型矩陣缺度為 8, 故 nleng(a) 等于 8.nleng( )15The SAS SystemC1 C2 C3 238a=11 0 -232 ,-1 3234 0 ,c1=nrow(a); c2=ncol(a) ; c3=nleng(a);The SAS SystemC 2a=0,-1,2,0;c=a loc(a), ;

28、The SAS SystemC1345a=1 0 2 ,-1 3 0 ,c=loc(a); prc ;語句得到的只有一個數(shù)值, 要想得到矩陣用 length(M ) 函數(shù),此時產(chǎn)生一個與矩陣 M一個元素表示矩陣 M 中相應(yīng)元素的長度。例 (3)(length):每個元素的長度,可以使維數(shù)相同的矩陣, 它的每例 (4)(type):函數(shù) type( ) 得到矩陣的類型,對于數(shù)值型,返回的值為 N ;字符型返回值為 C ;如果矩陣不含任何值,返回 U 。 a1 為數(shù)值型,a2 不含任何值,a3 為字符型,故分別返回 C, U, N .(二). 矩陣生成函數(shù)這類函數(shù)可以得到一些簡單,特殊的矩陣。下面

29、列出部分常用的函數(shù),其余詳見SAS/IML Users Guide(第八版),它們是16block( ) diag( )do( )i( ) insert( ) j( ) repeat( ) sqrsym( ) symsqr( ) t( ) vecdiag( )forms block-diagonal matri creates a diagonal matrixproduan arithmetic series creates an identity matrixinserts one matrix inside another creates a matrix of identical va

30、lues creates a new matrix of repeated valuesconverts a symmetric matrix to a square matrix converts a square matrix to a symmetric matrix transes a matrixcreates a vector from a diagonalThe SAS SystemC1 C2 C3 CUNa1=iml; c1=type(a1); free a2; c2=type(a2) ; a3=123;c3=type(a3);The SAS System C516a=o my

31、 name is jenny; c=leng);prc;例 (1)(block):block(M1, M2, , M15) 生成分快矩陣,但最多對 15 個矩陣進(jìn)行操作,例 (2)(diag):函數(shù) diag(M ), diag(V ) 只對矩陣中的方陣和向量有效。對于方陣,生成一個對角陣,其對角線元素和原矩陣相同; 對于向量,生成的對角陣中對角線元素即是這個向量的元素。例 (3)(vecdiag):函數(shù)矩陣vecdiag(M ) 同函數(shù) diag(M ) 一樣, 只對方陣有效, 生成一個由a 的對角線元素組成的列向量, 此例中, 矩陣 a 的對角線元素為 2, 1, 7, 故結(jié)果為一個由其組

32、成的列向量 (2 1 7)T .17The SAS System C2-17a=0 2 3,-1 -1 1,2 0 7;c=vecdiag(a); prc;The SAS SystemC1C2100100030020009003a1=1 0 2 ,-1 3 0,7 8 9;c1=diag(a1); a2=1 2 3;c2=diag(a2);The SAS System C1200340000560078a=1 2 ,3 4 ;b=5 6,7 8 ;c=block(a,b); prc;例 (2)(i,j):函數(shù) i(dimen) 生成 dimen階的矩陣;j(nrow, ncol, value)

33、 生成 nrow 行 ncol 列的矩陣,每個元素值為 value。此例, 生成了一個三階陣和一個 3 行 2 列每個元素為 1 的矩陣, 如果省略 value,則每個元素值為 1, 如果省略 ncol 和 value, 則生成每個元素為 1 的 nrow階方陣。例 (3)(do):函數(shù) do (start, stop, increment) 得到以 start 為第一個元素,00stop00 為最后一個元素,步長為 increment 的行向量。例 (4)(insert):函數(shù) insert(M1, M2, row, column) 將矩陣 M2入矩陣 M2 中,row, column m

34、行 n 列,則 row 的范圍分別表示的行數(shù),列數(shù)。 假設(shè)矩陣為為 0 m + 1,column 的范圍為 0 n + 1, 因為不可能同時在 m行,n 列(m,n 非零), 所以 m,n 中必須有一個為 0, 也只能有一個,矩陣 M1, M2 也要滿足一定的行列要求。此例, 首先將矩陣 b 插在 a18The SAS System CD1212565634787834a=1 2 ,3 4 ;b=5 6,7 8 ;c=insert(a,b,2,0);d=insert(a,b,0,3);The SAS SystemA369121518proc iml; a=do(3,18,3);pra; qui

35、t;The SAS System AB100110101100111proc iml; a=i(3); b=j(3,2,1);pra b; quit;的”第二行“,此時它們的列數(shù)相等;再將矩陣 b在 a 的“最后一列”,此時它們的行數(shù)是相等的。例 (5)(repeat):函數(shù) repeat(M, nrow, ncol) 生成 nrow以為矩陣)的矩陣。例 (6)(sqrsym,symsqr):行 ncol 列的元素全為 M (M 可函數(shù) symsqr(M ) 得到由方陣 M 的下三角位置的元素組成的列向量; 函數(shù) sqrsym(V )(V 為列向量)則剛好相反,將這個列向量返回一個對稱矩陣。例

36、 (7)(t):函數(shù) t(M ) 得到矩陣 M 的轉(zhuǎn)置 M 。(三). 數(shù)據(jù)集接口語句通過這類函數(shù)可以將數(shù)據(jù)集部分地或全部地轉(zhuǎn)化為矩陣。也可以對矩陣查詢后得到的“觀測”轉(zhuǎn)化為數(shù)據(jù)集, 即可以不使用數(shù)據(jù)步而方便地數(shù)據(jù)。例如,要從一個數(shù)據(jù)集中得到所有姓為 Smith 的人的碼, 可以直接使用下面的語句:號19a=1 2 ,3 4 ;b=t(a);The SAS System B1324a=1 2 ,3 4 ;b=symsqr(a); c=sqrsym(1,3,4);The SAS System BC1133344The SAS System B121212343434121212343434pro

37、c iml; a=1 2 ,3 4 ;b=repeat(a,2,3); prb;quit;read all varphhere(lastname=:”Smith”);下面列出部分常用的函數(shù),其余詳見SAS/IML Users Guide(第八版),它們是將數(shù)據(jù)集轉(zhuǎn)化為矩陣需要用 read 語句,而這個數(shù)據(jù)集必須首先已經(jīng)打開, 打開數(shù)據(jù)集可以通過 use 語句或 edit 語句來得到,其為:本格式SAS data set可以是臨時數(shù)據(jù)集也可以是數(shù)據(jù)集其 ,用來選擇某些特定的變量條件表達(dá)式operandexpresvar operand 可以是下列形式之一:具體列舉變量名,如:var times1

38、 times5 times9;元素為變量名的矩陣,如:var time;變量名的簡略表達(dá)式,如:var (times1:times9);關(guān)鍵字表達(dá)式,如:var all (所有變量);var char (所有字符型變量);var num (所有數(shù)值型變量);打開了需要的數(shù)據(jù)集后,就可以用 read 語句來“讀入”矩陣了,read語句的基本用法為:20read o nameuse SAS data set ;edit SAS data set ;append edit read use createadds observations to SAS dataset opens a SAS data

39、 set for editing reads observations from a data set opens a SAS data set for reading creates a new SAS dataset選擇觀測的范圍選擇某些變量 判斷表達(dá)式目標(biāo)矩陣的名字行列rangeoperand expres namerow name其中,column name在型數(shù)據(jù)集 classlib.class 中有關(guān)于全班同學(xué)的各項數(shù)據(jù),可以將全體的(age), 身高(height), 重量(weight)的數(shù)據(jù)組成一個新的矩陣 female.通過 create 語句和 append 語句可以在

40、IML 模塊里將矩陣轉(zhuǎn)化為數(shù)據(jù)集,create 語句用于打開新的數(shù)據(jù)集, append 語句用于將數(shù)據(jù)寫入矩陣,create 語句的基本格式有以下二種(這兩種格式不能同時使用):新數(shù)據(jù)集名含數(shù)據(jù)的矩陣名描述數(shù)據(jù)集變量名的字符型矩陣描述數(shù)據(jù)集觀測的字符型矩陣sas datasetmatrix其中,olumnnamerow name假如要產(chǎn)生一個名為 ratio 的數(shù)據(jù)集, 包含每個學(xué)生的身高與體重的比率,而這些數(shù)據(jù)保存在名為 htwr 的列向量中, 可以通過 create 語句和 append 語句得到,并且取變量名為 bilv.假如要產(chǎn)生一個含變量 name,sex,age,height 的新

41、數(shù)據(jù)集 class,可以使用下面的語句:(四). 模塊的定義以及使用21CREATE class V ARname sex age height; APPEND;CREATE ratio FROMhtwrCOLNAME =0 bilv0;APPEND from htwr;CREATE sas dataset V AR operand ; CREATE sas dataset FROMmatrix;USE classlib.class ;READ all VAR age height weightO female WHERE(sex=”F”);SAS/IML 中的模塊類似于其他語言中的函數(shù),在定

42、義之后可以在程序的任何一個地方多次使用,但是它又和函數(shù)的定義有些不同, 它不一定要有自變量,返回值可能只是一段連續(xù)的語句,模塊的一般框架為:例:return 語句表示模塊 a(x) 返回的值, 以后可以像其他函數(shù)一樣使用,a(0, 1, 2, 3, 4) 表示對矩陣中每一個元素運算, 所得結(jié)果仍為一個列向量。這是模塊用作函數(shù)的一個示例,模塊還可以僅運行一些語句,這時用 run 或者 call 語句,另外, 模塊之間允許嵌套。下面重點講述模塊應(yīng)用的一個頭等重要的概念,變量表,當(dāng)變量被定義在模塊之外的環(huán)境時, 變量的名字會被在“全局變量表”,而模塊參數(shù)中定義的變量,會出現(xiàn)在一張為模塊準(zhǔn)備的獨立的“

43、局部變量表”中, 所有的模塊內(nèi)使用的變量都被在這張表,因此,當(dāng)你定義了多個模塊后,相應(yīng)的會有多個“局部變量表”, 局部變量表的變量的值是暫時的,僅在模塊內(nèi)有效,模塊的定義方式會影響到這寫局部變量的值是不是改變?nèi)肿兞康闹?,量與全局變量是怎么樣互相影響的。例 (1). 模塊中不定義參數(shù)的情形一一說明,重點要掌握局部變當(dāng)定義一個模塊沒有參數(shù)時,并不產(chǎn)生一個局部變量表,因此, 所有的變量都是全局變量,模塊內(nèi)使用的變量的值應(yīng)當(dāng)?shù)扔谀K外變量的值, 在模塊內(nèi)新產(chǎn)生的變量,就會被寫入全局變量表,而如果在模塊內(nèi)改變原有變量的值, 也會改變它在全局的值。這種情況可以理解為不區(qū)22The SAS System

44、T-1-0.158529-0.090703-0.85888-0.243198start a(x); y=sin(x);z=abs(y)-1; return(z);finish a; t=a(0,1,2,3,4);prt;start 模塊名(參數(shù)名);程序語句 finish 模塊名;分局部變量表和全局變量表。如打印所有值,可知A 仍然是 10,B 仍然是 20,C 改變?yōu)?40,P,Q 是新產(chǎn)生的,會加到全局變量表,P 為 30,Q 為 10。例 (2). 模塊中定義參數(shù)的情形23proc iml;a=10;/*A is global*/b=20;/*B is global*/c=30;/*C is global*/d=90;/*D is global*/ start mod2(x,y);p=x+y;/*P is local*/q=y-x;/*Q is lo

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論