ARRAYステートメントによる配列の定義方法を紹介していきます。
(※ 書き方のパターンがたくさんあるので、触りのみに留めます)ARRAY 配列名( 要素数 ) 割り当てる変数 ; |
例
まず「array AR(3)」で、ARという配列を定義し、変数や値を3つ割り当てられるようにしてます。
割り当てた変数は「AR(1)」や「AR(2)」というように「配列名(要素番号)」で参照する事が出来ます。
具体例
解説
arrayステートメントで各配列に以下の変数を割り当てています。
AR(1) は変数A
AR(2) は変数B
AR(3) は変数C
そのため、「AR(1) = 10;」 と書くと 「A = 10;」 と書いたのと同じ意味になります。
実践例
以下は変数が欠損値であればいっぺんに0に置き換える例です。
解説
まず配列ARに変数A,B,Cを割り当てます。
do i = 1 to dim(AR);
処理
end;
で、変数 i の値を1~3 (配列の要素数) まで変化させながら中の処理を繰り返します。
中の処理 「if AR(i) = . then AR(i)=0」 は、配列の要素番号を1~3まで変化させながら処理が繰り返されるので、以下のように配列に割り当てた変数全てに処理が行われます。
if A = . then A=0;
ARRAYとDOループの組み合わせはよく見かける鉄板コンビです。
array AR(3) A B C; |
まず「array AR(3)」で、ARという配列を定義し、変数や値を3つ割り当てられるようにしてます。
次の「A B C」でこの配列に変数A, B, Cを割り当てています。
割り当てた変数は「AR(1)」や「AR(2)」というように「配列名(要素番号)」で参照する事が出来ます。
data DT1; array AR(3) A B C; AR(1) = 10; AR(2) = 20; AR(3) = 30; run;
|
解説
arrayステートメントで各配列に以下の変数を割り当てています。
AR(1) は変数A
AR(2) は変数B
AR(3) は変数C
そのため、「AR(1) = 10;」 と書くと 「A = 10;」 と書いたのと同じ意味になります。
ちなみに配列に割り当ててる変数が「A B C」の3つなので、当然要素数も3つだろってことで、「array AR(*) A B C;」というように、要素数をアスタリスク(*)で省略して書けます。
ここで注意点!
配列に割り当てる変数は、
- すべて同じ型である必要があります(全て文字変数、または全て数値変数)
- 「lengthを定義してない新規文字変数」を配列に割り当てる場合は、先にlengthステートメント等で長さを定義しておくのを忘れずに。
以下は変数が欠損値であればいっぺんに0に置き換える例です。
* サンプルデータ ; data SAMPLE1; input A B C; cards; 10 . 20 . . 30 ;
* 欠損値を0に置き換える ; data DT2; set SAMPLE1; array AR(*) A B C; do i = 1 to dim(AR); if AR(i) = . then AR(i)=0; end; drop i; run;
|
解説
array AR(*) A B C;
|
まず配列ARに変数A,B,Cを割り当てます。
do i = 1 to dim(AR);
if AR(i) = . then AR(i)=0;
end;
|
DIM関数は、配列の要素数を返してくれる関数です。つまり
do i = 1 to dim(AR);
処理
end;
で、変数 i の値を1~3 (配列の要素数) まで変化させながら中の処理を繰り返します。
中の処理 「if AR(i) = . then AR(i)=0」 は、配列の要素番号を1~3まで変化させながら処理が繰り返されるので、以下のように配列に割り当てた変数全てに処理が行われます。
if A = . then A=0;
if B = . then B=0;
if C = . then C=0;
ARRAYとDOループの組み合わせはよく見かける鉄板コンビです。
0 件のコメント:
コメントを投稿