前のページ|次のページ

LEXCOMBI関数

n個のオブジェクトを同時にk個使用するときのインデックスのすべての組み合わせを、辞書式順序で生成します。

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

構文

LEXCOMBI(n, k, index-1, …, k)

必須引数

n

オブジェクトの合計数を指定する数値の定数、変数または式です。

K

各組み合わせのオブジェクト数を指定する数値の定数、変数または式です。

index

返される組み合わせでオブジェクトのインデックスが入る数値変数です。インデックスは1からn(1とnを含む)までの整数です。

ヒント index-1が欠損しているかゼロの場合、LEXCOMBI関数はインデックスをindex-1=1からindex-k=kに初期化します。それ以外の場合、LEXCOMBIは組み合わせからインデックスを1つ削除し、別のインデックスを追加して、新しい組み合わせを作成します。

詳細

LEXCOMBI関数を初めて実行する前に、次のタスクのいずれかを実行します。
  • index-1をゼロまたは欠損値に設定します。
  • index-1からindex-kを1からn(1とnを含む)までの重複しない整数に初期化します。
n個のオブジェクトを同時にk個使用するときの組み合わせ数は、COMB(n,k)で計算できます。n個のオブジェクトを同時にk個使用するときのすべての組み合わせを生成するには、COMB(n,k)回実行するループでLEXCOMBI関数を実行します。
LEXCOMBI関数で返される値は、どのインデックスが変更されたかを示します(ある場合)。index-1からindex-iは変更されず、index-jが変更された場合(j=i+1)、LEXCOMBIはiを返します。辞書式順序の最後の組み合わせが生成された後にLEXCOMBIが呼び出されると、LEXCOMBIは–1を返します。

比較

LEXCOMBI関数は、n個のオブジェクトを同時にk個使用するときのすべてのインデックスの組み合わせを、辞書式順序で生成します。ALLCOMBI関数は、n個のオブジェクトを同時にk個使用するときのすべてのインデックスの組み合わせを、変化量の小さい順に生成します。

次の例では、LEXCOMBI関数を使用してインデックスの組み合わせを辞書式順序で生成します。
data _null_;
   array x[5] $3 ('ant' 'bee' 'cat' 'dog' 'ewe');
   array c[3] $3;
   array i[3];
   n=dim(x);
   k=dim(i);
   i[1]=0;
   ncomb=comb(n, k);
   do j=1 to ncomb+1;
      rc=lexcombi(n, k, of i[*]);
      do h=1 to k;
         c[h]=x[i[h]];
      end;
      put @4 j= @10 'i= ' i[*] +3 'c= ' c[*] +3 rc=;
   end;
run;
次の出力がログに書き込まれます。
   j=1 i= 1 2 3 c= ant bee cat rc=1 j=2 i= 1 2 4 c= ant bee dog rc=3 j=3 i= 1 2 5 c= ant bee ewe rc=3 j=4 i= 1 3 4 c= ant cat dog rc=2 j=5 i= 1 3 5 c= ant cat ewe rc=3 j=6 i= 1 4 5 c= ant dog ewe rc=2 j=7 i= 2 3 4 c= bee cat dog rc=1 j=8 i= 2 3 5 c= bee cat ewe rc=3 j=9 i= 2 4 5 c= bee dog ewe rc=2 j=10 i= 3 4 5 c= cat dog ewe rc=1 j=11 i= 3 4 5 c= cat dog ewe rc=-1

関連項目:

前のページ|次のページ|ページの先頭へ