前のページ|次のページ

ALLCOMB関数

n個の変数値から一度にk個の変数値を取得する場合のすべての組み合わせを変化量の小さい順に生成します。

カテゴリ: 組み合わせ
制限事項: ALLCOMB関数は、%SYSFUNCマクロを使用する場合には実行できません。

構文

必須引数

count

ループで1から組み合わせ数までの値を割り当てる整数変数を指定します。

k

各組み合わせの項目数を示す1からn(1とnを含む)までの整数の定数、変数または式を指定します。

variable

すべての数値変数または同じ長さのすべての文字変数を指定します。これらの変数の値は置換されます。

制限事項 33個以内で項目を指定します。33個を超える項目の組み合わせを検出する必要がある場合は、CALL ALLCOMBIルーチンを使用します。
要件 ALLCOMB関数を実行する前にこれらの変数を初期化します。
ヒント ALLCOMBを実行すると、最初のk個の変数に1つの組み合わせの値が含まれます。

詳細

ALLCOMB関数をループで使用して、ALLCOMBの第1引数で各整数値(1から組み合わせ数まで)を受け入れます。kは定数です。組み合わせ数は、COMB関数を使用して計算できます。最初の実行で、引数の種類と長さに不整合がないか確認されます。後続の各実行で、2つの変数の値が交換されます。
ALLCOMB関数では、次のアクションが実行されます。
  • ALLCOMBは、最初の実行で0を返します。
  • variable-ivariable-jの値が交換される場合(i<j)、ALLCOMBはiを返します。
  • すべての組み合わせがすでに生成されていたために値が交換されなかった場合、ALLCOMBは–1を返します。
ALLCOMB関数を実行する場合に第1引数の順序が違っていると、その結果は役に立ちません。具体的には、変数を初期化した直後に第1引数にjを指定してALLCOMB関数を実行しても、j番目の組み合わせは取得できません(jが1の場合を除く)。j番目の組み合わせを取得するには、第1引数で1からjの値までをそのままの順序で取得して、ALLCOMBをj回実行する必要があります。

比較

SASには、組み合わせを生成する4つの関数またはCALLルーチンがあります。
  • ALLCOMB:N個の変数の(欠損値または非欠損値)の考えられるすべての組み合わせを生成します。値は数値または文字値になります。各組み合わせは、前の組み合わせに基づいて形成されます(1つの値を削除して別の値を挿入)。
  • LEXCOMB:複数の変数の非欠損値重複しないすべての組み合わせを生成します。値は数値または文字値になります。組み合わせは、辞書式順序で生成されます。
  • ALLCOMBI:N個の項目のindicesのすべての組み合わせを生成します。indicesは1からNまでの整数です。各組み合わせは、前の組み合わせに基づいて形成されます(1つのインデックスを削除して別のインデックスを挿入)。
  • LEXCOMBI:N個の項目のindicesのすべての組み合わせを生成します。indicesは1からNまでの整数です。組み合わせは、辞書式順序で生成されます。
ALLCOMBIは最も速い関数およびCALLルーチンです。最も遅いのはLEXCOMBです。

ALLCOMB関数の例を次に示します。
data _null_;
   array x[5] $3 ('ant' 'bee' 'cat' 'dog' 'ewe');
   n=dim(x);
   k=3;
   ncomb=comb(n, k);
   do j=1 to ncomb+1;
      rc=allcomb(j, k, of x[*]);
      put j 5. +3 x1-x3 +3 rc=;
   end;
run;
次の出力がログに書き込まれます。
    1 ant bee cat rc=0 2 ant bee ewe rc=3 3 ant bee dog rc=3 4 ant cat dog rc=2 5 ant cat ewe rc=3 6 ant dog ewe rc=2 7 bee dog ewe rc=1 8 bee dog cat rc=3 9 bee ewe cat rc=2 10 dog ewe cat rc=1 11 dog ewe cat rc=-1

関連項目:

CALLルーチン:
前のページ|次のページ|ページの先頭へ