「ARRAYステートメント」の編集履歴(バックアップ)一覧はこちら
ARRAYステートメント - (2008/10/12 (日) 20:25:52) の最新版との変更点
追加された行は緑色になります。
削除された行は赤色になります。
配列を定義する。
DATAステップステートメントで指定する。
※複数の変数に対して、同じ処理を行う場合にARRAYステートメントを使用して
配列を定義し、DOステートメントを使用すると便利である。
構文
#highlight(linenumber,sas){{
DATA = SASデータセット名 ;
ARRAY 配列名 {要素数} [$] [長さ] [配列要素] [(初期値)];
DO I=1 to 5 ;
配列名{要素数}= x ; /*xを代入*/
END ;
run;}}
・使用例
dat1~dat5までの5つの変数をgroup{n}という名前で参照できる。
group{3} … 変数dat3を処理対象とする。
配列名:配列名として有効なSAS名を指定。
※SAS関数名や同一DATAステップ中のSAS変数名と同じ名前を付けないように注意。
要素数:配列要素の数を表す数値または(またはアスタリスク)を指定。
※括弧は中括弧{}の代わりに、大括弧[]または丸括弧()を使用することができる。
***指定形式その1…配列の各次元の要素数を指定。
・1次元配列を定義する場合、その配列の要素数をそのまま指定。
例)3つの要素を持つ1次元配列
ARRAY test {3} red green yellow ;
・多次元配列を定義するには、各次元の要素数をコンマで区切って指定。
2次元配列の場合、最初の数値は行、2番目の数値は列に対応。
例)5行3列からなる2次元配列
ARRAY box {5,3} x1-x15 ;
#image(http://www39.atwiki.jp/sas_help/?cmd=upload&act=open&page=%E5%8F%82%E7%85%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E4%B8%80%E8%A6%A7&file=array1.JPG)
***指定形式その2…添字の上限と下限を指定。(添字の下限defortは1。)
例1)添字の下限が76、上限が85の1次元配列
ARRAY yer{76:85} yer76-yer85 ;
例2)ARRAY box {1:5,1:3} x1-x15 ;
***指定形式その3…アスタリスク(*)配列の要素数を、引数配列要素に指定された
変数の数から割り出す。(配列要素の指定が必須。多次元配列では指定できない。)
$ :配列の要素がすべて文字であることを示す。
length :配列要素の長さを指定。
配列要素 :配列に指定したい変数をブランクで区切って列挙。
指定する変数の型はすべて同一でなければならない。
※下記のキーワード指定し、データステップ内で定義されたSAS変数を定義する。
_ALL_ 全てのSAS変数(SAS変数の型が全て同一でなければならない。)
_NUMERIC_ 全ての数値変数
_CHARACTER_ 全ての文字変数
※要素数に数値を指定した場合、変数リストが省略できる。
配列名のあとに1、2、…nがついた変数名を自動的に作成する。
_TEMPORARY_ 一時変数からなる配列が定義(中間結果を保存するときに使用。)
変数名を持たない。(値は配列名と添字によって参照される。)
SASデータセットに書き出されない。
データステップによるオブザベーションに対する反復処理の開始時に欠損値に初期化されない。
要素数に*を指定した場合、_TEMPORARY_は指定できない。
初期値:初期値の区切りにはカンマの代わりにブランクも指定できる。
配列要素に指定した変数の左から順に割り当てられる。
初期値の値より、配列の要素の個数が多いときは、残りの配列要素に欠損値が入る。
配列要素の属性(長さや型など)を指定していない場合、初期値の最初の値により、
配列の全変数の属性が決定する。
例)
ARRAY test1{3} t1 t2 t3 (90, 80, 70);
ARRAY test2{3} a1 a2 a3 ('a' 'b' 'c');
#image(http://www39.atwiki.jp/sas_help/?cmd=upload&act=open&page=%E5%8F%82%E7%85%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E4%B8%80%E8%A6%A7&file=array2.JPG)
データ加工ver1とデータ加工ver2は同じ結果である。
#highlight(sas){
/*テストデータ*/
data test1;
do i=1 to 2 ;
a=1;
b=2;
c=3;
d=4;
e=5;
f=6;
output;
end;
run;
/*データ加工ver1*/
data test2_1;
set test1;
array box(3) x1-x3;
box(1)=a;
box(2)=b;
box(3)=c;
output;
box(1)=d;
box(2)=e;
box(3)=f;
output;
run;
/*データ加工ver2*/
data test2_2 ;
set test1;
array in (6) a b c d e f;
array box(3) x1-x3;
do i=1 to 3;
if in(i) eq . then box(i) = . ;
else box(i) = in(i) ;
end;
output;
do i=4 to 6;
if in(i) eq . then box(i-3) = . ;
else box(i-3) = in(i) ;
end;
output;
run;}
#hr(height=1,color=#002bb8)
配列を定義する。
DATAステップステートメントで指定する。
※複数の変数に対して、同じ処理を行う場合にARRAYステートメントを使用して
配列を定義し、DOステートメントを使用すると便利である。
構文
#highlight(linenumber,sas){{
DATA = SASデータセット名 ;
ARRAY 配列名 {要素数} [$] [長さ] [配列要素] [(初期値)];
DO I=1 to 5 ;
配列名{要素数}= x ; /*xを代入*/
END ;
run;}}
・使用例
dat1~dat5までの5つの変数をgroup{n}という名前で参照できる。
group{3} … 変数dat3を処理対象とする。
配列名:配列名として有効なSAS名を指定。
※SAS関数名や同一DATAステップ中のSAS変数名と同じ名前を付けないように注意。
要素数:配列要素の数を表す数値または(またはアスタリスク)を指定。
※括弧は中括弧{}の代わりに、大括弧[]または丸括弧()を使用することができる。
***指定形式その1…配列の各次元の要素数を指定。
・1次元配列を定義する場合、その配列の要素数をそのまま指定。
例)3つの要素を持つ1次元配列
ARRAY test {3} red green yellow ;
・多次元配列を定義するには、各次元の要素数をコンマで区切って指定。
2次元配列の場合、最初の数値は行、2番目の数値は列に対応。
例)5行3列からなる2次元配列
ARRAY box {5,3} x1-x15 ;
#image(http://www39.atwiki.jp/sas_help?cmd=upload&act=open&pageid=19&file=array1.JPG)
***指定形式その2…添字の上限と下限を指定。(添字の下限defortは1。)
例1)添字の下限が76、上限が85の1次元配列
ARRAY yer{76:85} yer76-yer85 ;
例2)ARRAY box {1:5,1:3} x1-x15 ;
***指定形式その3…アスタリスク(*)配列の要素数を、引数配列要素に指定された
変数の数から割り出す。(配列要素の指定が必須。多次元配列では指定できない。)
$ :配列の要素がすべて文字であることを示す。
length :配列要素の長さを指定。
配列要素 :配列に指定したい変数をブランクで区切って列挙。
指定する変数の型はすべて同一でなければならない。
※下記のキーワード指定し、データステップ内で定義されたSAS変数を定義する。
_ALL_ 全てのSAS変数(SAS変数の型が全て同一でなければならない。)
_NUMERIC_ 全ての数値変数
_CHARACTER_ 全ての文字変数
※要素数に数値を指定した場合、変数リストが省略できる。
配列名のあとに1、2、…nがついた変数名を自動的に作成する。
_TEMPORARY_ 一時変数からなる配列が定義(中間結果を保存するときに使用。)
変数名を持たない。(値は配列名と添字によって参照される。)
SASデータセットに書き出されない。
データステップによるオブザベーションに対する反復処理の開始時に欠損値に初期化されない。
要素数に*を指定した場合、_TEMPORARY_は指定できない。
初期値:初期値の区切りにはカンマの代わりにブランクも指定できる。
配列要素に指定した変数の左から順に割り当てられる。
初期値の値より、配列の要素の個数が多いときは、残りの配列要素に欠損値が入る。
配列要素の属性(長さや型など)を指定していない場合、初期値の最初の値により、
配列の全変数の属性が決定する。
例)
ARRAY test1{3} t1 t2 t3 (90, 80, 70);
ARRAY test2{3} a1 a2 a3 ('a' 'b' 'c');
#image(http://www39.atwiki.jp/sas_help?cmd=upload&act=open&pageid=19&file=array2.JPG)
データ加工ver1とデータ加工ver2は同じ結果である。
#highlight(sas){
/*テストデータ*/
data test1;
do i=1 to 2 ;
a=1;
b=2;
c=3;
d=4;
e=5;
f=6;
output;
end;
run;
/*データ加工ver1*/
data test2_1;
set test1;
array box(3) x1-x3;
box(1)=a;
box(2)=b;
box(3)=c;
output;
box(1)=d;
box(2)=e;
box(3)=f;
output;
run;
/*データ加工ver2*/
data test2_2 ;
set test1;
array in (6) a b c d e f;
array box(3) x1-x3;
do i=1 to 3;
if in(i) eq . then box(i) = . ;
else box(i) = in(i) ;
end;
output;
do i=4 to 6;
if in(i) eq . then box(i-3) = . ;
else box(i-3) = in(i) ;
end;
output;
run;}
#hr(height=1,color=#002bb8)