前のページ|次のページ

配列参照ステートメント

処理する配列要素を記述します。

該当要素: DATAステップ
カテゴリ: 情報
種類: 宣言

構文

引数

array-name

同一のDATAステップ内でARRAYステートメントによってすでに定義されている配列名です。

{subscript}

subscript(添字)を指定します。次のいずれかの形式を使用できます。

{variable-1< , …variable-n>}

通常、DOループの処理で使用する変数または変数のリストを指定します。DOループの実行時ごとに、この変数の現在の値が処理される配列要素のsubscriptになります。

ヒント subscriptは中かっこ({})、大かっこ( [ ] )、丸かっこ(( ))で囲むことができます。
反復DOループ処理を使用する

{*}

配列内の要素を変数リストとして強制的に処理するように指定します。

制限事項 一時配列要素を含む配列を定義する際、アスタリスクを使用して配列要素を参照することはできません。
ヒント アスタリスクは、INPUTステートメント、PUTステートメント、および一部のSAS関数で使用できます。
この構文は処理を容易にするために提供されていますが、通常の配列処理では使用できません。
変数リストとしてアスタリスクを使用する

expression-1< , ...expression-n>

SAS式を指定します。

範囲 配列参照を含むステートメントの実行時、この式の値がsubscript値になります。また、この式の結果は、配列数の下限値と上限値の範囲内の整数になります。
subscriptを指定する

詳細

  • プログラムステートメント内で配列を参照するには、配列参照を使用します。配列を定義するARRAYステートメントは、DATAステップ内でこの配列の参照箇所よりも前の位置に指定する必要があります。配列定義は同じDATAステップでのみ有効です。複数のDATAステップで同じ配列を使用する場合、ステップごとに配列を再定義します。
    注意:
    SAS関数の名前を配列名として使用すると、予期しない結果が生じることがあります。
    配列名として関数名を誤って使用すると、DATAステップ実行中、指定した名前を含むかっこ付きの参照名は関数の呼び出しではなく配列参照と解釈されます。そのため、警告メッセージがSASログに書き込まれます。
  • 配列参照は、SAS関数やSASステートメントなどのSAS式を記述できるところであればどこにでも指定できます。
    • 割り当てステートメント
    • 合計ステートメント
    • DO UNTIL(expression)
    • DO WHILE(expression)
    • IF
    • INPUT
    • PUT
    • SELECT
    • WINDOW
  • 配列次元の下限値が1の場合、配列次元の要素数を返すために、DIM関数を反復DOステートメントと組み合わせてよく使用します。DIM関数を使用すると、DOステートメントの上限値を変更せずに配列要素の数を変更することができます。次の例では、DIM(NEW)の結果として4が返されるので、後続のステートメントでは配列内のすべての要素を処理します。
    array new{*} score1-score4;
       do i=1 to dim(new);
          new{i}=new{i}+10;
       end;

比較

ARRAYステートメントでは配列を定義しますが、配列参照では処理対象となる配列メンバを定義します。

例1: 反復DOループ処理を使用する

この例では、DOループを繰り返す際、変数Iの値を配列参照のsubscriptとして使用して、配列の各要素を処理します。配列要素の値が99の場合、その値はIF-THENステートメントによって100に変更されます。
array days{7} d1-d7;
   do i=1 to 7;
      if days{i}=99 then days{i}=100;
   end;

例2: 1つのステートメントで複数の配列を参照する

1つのSASステートメントで複数の配列を参照することができます。この例では、DAYSとHOURSという2つの配列を作成します。DOループ内のステートメントでは、この2つの配列にある配列要素を参照して変数Iの現在の値を置き換えます。
array days{7} d1-d7;
   array hours{7} h1-h7;
      do i=1 to 7;
         if days{i}=99 then days{i}=100;
         hours{i}=days{i}*24;
      end;

例3: subscriptを指定する

この例では、INPUTステートメントを使用して、変数A1と変数A2、配列ARR1の3番目の要素(A3)を読み取ります。
array arr1{*} a1-a3;
x=1;
input a1 a2 arr1{x+2};

例4: 変数リストとしてアスタリスクを使用する

  • array cost{10} cost1-cost10;
    totcost=sum(of cost {*});
  • array days{7} d1-d7;
    input days {*};
  • array hours{7} h1-h7;
    put hours {*};

関連項目:

XisError: No pubcode in link data found for lrcon
関数:
XisError: No pubcode in link data found for lefunctionsref
前のページ|次のページ|ページの先頭へ