ARRAYステートメント

「ARRAYステートメント」の編集履歴(バックアップ)一覧はこちら

ARRAYステートメント」(2008/10/12 (日) 23:46:34) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

配列を定義する。 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=array2.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)
配列を定義する。 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)

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。