前のページ|次のページ

ARRAYステートメント

配列の要素を定義します。

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

構文

引数

array-name

配列の名前を指定します。

制限事項 Array-nameにはSAS名を指定する必要があります。
注意:
SAS関数の名前を配列名として使用すると、予期しない結果が生じることがあります。
配列名として関数名を誤って使用すると、DATAステップの実行時に、指定した名前を含むかっこ付きの参照名は関数の呼び出しではなく配列参照として解釈されます。この結果、警告メッセージがSASログに書き込まれます。

{subscript}

アスタリスク、数値、または数値の範囲を使用して、配列内の要素数と配置順序を指定します。subscriptは、次のいずれかの形式になります。

{dimension-size(s)}

配列の各次元の要素数を指定します。dimension-sizeは、1次元配列の要素数または多次元配列の各次元の要素数を示す数値です。

ヒント subscriptは中かっこ({})、大かっこ( [ ] )、丸かっこ(( ))で囲むことができます。
次のARRAYステートメントは、SIMPLEという名前の1次元配列を定義します。SIMPLE配列には、RED、GREEN、YELLOWという3つの変数がまとめられています。
array simple{3} red green yellow;
次元が複数ある配列は、多次元配列と呼ばれます。多次元配列の次元数に制限はありません。たとえば、2次元配列は、配列要素の行列配置を提供します。SASでは変数を2次元配列に配置する場合、配列の上部左端から開始して、すべての行を順番に書き込みます(これを「行順」と呼びます)。次のステートメントでは、5行3列で構成される2次元配列を定義します。
array x{5,3} score1-score15;

{<lower :>upper<, ...<lower :> upper>}

配列の各次元の範囲を示しています。lowerは次元の下限、upperは次元の上限を示しています。

範囲 多くの明示的な配列では、配列の各次元のsubscriptは1からnまでになります。nは、この次元の要素数になります。
ヒント 通常の配列では、1は下限として便利です。このため、通常、上限と下限を指定する必要はありません。ただし、配列次元を1以外の数値から開始する場合、上限値と下限値の両方を指定することをお勧めします。
subscriptの評価に必要な時間を短縮するには、下限として0を指定します。
次の例では、各次元の値は、デフォルトで各次元の上限になります。
array x{5,3} score1-score15;
次のARRAYステートメントでは、もう1つの方法として前の例を長い形式で示します。
array x{1:5,1:3} score1-score15;

{*}

配列内の変数の数からsubscriptを算出するように指定します。アスタリスクを指定する場合、array-elementsも指定する必要があります。

制限事項 アスタリスクは、_TEMPORARY_配列では使用できないほか、多次元配列の定義時にも使用できません。

$

配列内の要素が文字要素であることを指定します。

ヒント 配列要素が文字要素であることがすでに定義されている場合、ドル記号を指定する必要はありません。

length

配列要素の長さが設定されていない場合に配列要素の長さを指定します。

array-elements

配列を構成する要素の名前を指定します。array-elementsは、すべて数値で指定するか、すべて文字で指定します。任意の順序で指定できます。次の配列要素があります。

variables

変数名をリストします。

範囲 この名前は、ARRAYステートメントにて定義した変数か、配列名と数値を組み合わせてSASによって作成された変数のいずれかになります。たとえば、subscriptがアスタリスクではなく数値である場合、配列内にある各変数の名前を指定する必要はありません。かわりに、配列名と数値1、2、3、…nを組み合わせた変数名がSASによって作成されます。
制限事項 _ALL_を使用する場合、過去に定義済みの変数はすべて同一の種類である必要があります。
ヒント このようなSAS変数のリストにより、同一のDATAステップで過去に定義済みの変数を参照できます。
_NUMERIC_は、すべての数値変数を示します。
_CHARACTER_は、すべての文字変数を示します。
_ALL_を使用すると、すべての変数を示します。
配列を定義する

_TEMPORARY_

一時データ要素で構成されるリストを作成します。

範囲 一時データ要素は、数値または文字列になります。
ヒント 一時データ要素はDATAステップの変数と同じように動作しますが、次の例外があります。
一時データ要素には名前がありません。一時データ要素の参照には、配列名と次元が使用されます。
出力データセットには書き出されません。
すべての要素を参照するために、特殊なsubscriptであるアスタリスク(*)は使用できません。
一時データ要素の値は常に自動的に保持されます。この値は、DATAステップの次の繰り返しの先頭に戻った際に欠損値にリセットされません。
配列を作成する目的が演算の実行のみにある場合、一時要素の配列を使用すると便利です。演算結果を保存するには、その結果を変数に割り当てます。一時データ要素を使用すると処理時間を短縮することができます。

(initial-value-list)

配列内の対応する要素に初期値を指定します。要素の値には、数値または文字列を指定します。文字列はすべて引用符で囲む必要があります。1つまたは複数の初期値を直接指定するには、次の形式を使用します。

(initial-value(s))
繰り返しの回数とネスト形式のサブリストを初期値に指定するには、次の形式を使用します。
<constant-iter-value*> <(>constant value | constant-sublist<)>
制限事項 initial-value-listarray-elementsの両方を指定する場合、ARRAYステートメントではarray-elementsinitial-value-listより前に指定する必要があります。
ヒント 変数と一時データ要素の両方に初期値を割り当てることができます。
要素と値は位置を基準にして照合されます。指定した初期値の数よりも配列数が多い場合、初期値が割り当てられなかった配列要素には欠損値が割り当てられます。また、警告メッセージが発行されます。
初期値のリストはカンマまたはブランクを使用して区切ることができます。
連続する整数値の範囲を指定する場合は、簡略化した表記を使用できます。増分は常に+1になります。
配列要素の属性(長さや種類など)を指定していない場合は、指定した初期値の属性が対応する配列要素に自動的に割り当てられます。初期値は、配列要素に新しい値が割り当てられるまで保持されます。
一部またはすべての要素に初期値を割り当てると、すべての要素はRETAINステートメントに指定した場合と同じように動作します。
次の例では、反復係数とネストされたサブリストを使用する方法を示します。次のすべてのARRAYステートメントでは、同じ初期値リストが使用されています。
ARRAY x{10} x1-x10 (10*5); 
ARRAY x{10} x1-x10 (5*(5 5));
ARRAY x{10} x1-x10 (5 5 3*(5 5) 5 5);
ARRAY x{10} x1-x10 (2*(5 5) 5 5 2*(5 5));
ARRAY x{10} x1-x10 (2*(5 2*(5 5)));
数値の初期値を割り当てる

文字列の初期値を割り当てる

詳細

ARRAYステートメントは、グループとして処理する要素のまとまりを定義します。配列の要素は、配列名とsubscriptを基準にして参照されます。1つの配列内で複数の要素を処理する場合が多いため、配列はDOグループ内で頻繁に参照されます。

比較

  • SAS言語で使用する配列は、他の多くの言語で使用する配列とは異なります。SASの配列は、変数のグループを一時的に識別するための便利な方法として使用します。この配列はデータ構造ではありません。また、array-nameは変数ではありません。
  • ARRAYステートメントは、配列を定義します。配列参照は、プログラムステートメントにて配列要素を使用します。

例1: 配列を定義する

  • array rain {5} janr febr marr aprr mayr;
  • array days{7} d1-d7;
  • array month{*} jan feb jul oct nov;
  • array x{*} _NUMERIC_;
  • array qbx{10};
  • array meal{3};

例2: 数値の初期値を割り当てる

  • array test{4} t1 t2 t3 t4 (90 80 70 70);
  • array test{4} t1-t4 (90 80 2*70);
  • array test{4} _TEMPORARY_ (90 80 70 70);

例3: 文字列の初期値を割り当てる

  • array test2{*} $ a1 a2 a3 ('a','b','c');

例4: 高度な配列を定義する

  • array new{2:5} green jacobs denato fetzer;
  • array x{5,3} score1-score15;
  • array test{3:4,3:7} test1-test10;
  • array temp{0:999} _TEMPORARY_;
  • array x{10} (2*1:5);

例5: 先頭に0を持つ変数名の範囲を作成する

次の例では、先頭に0を持つ変数名の範囲を作成します。各変数名の長さは3文字です。この変数名はA01、A02、…A10の順に正しく並べられます。先頭の0がなければ、変数名はA1、A10、A2、… A9の順に並べられます。
data test (drop=i);
   array a{10} A01-A10;
   do i=1 to 10;
      a{i}=i;
   end;
run;
proc print noobs data=test;
run;
先頭に0を持つ配列名
先頭に0を持つ配列名

関連項目:

XisError: No pubcode in link data found for lrcon
ステートメント:
前のページ|次のページ|ページの先頭へ