前のページ|次のページ

LEXPERM関数

複数の変数の非欠損値の重複しないすべての順列を辞書式順序で生成します。

カテゴリ: 組み合わせ

構文

LEXPERM(count, variable-1 <, …, variable-N>)

必須引数

count

1から順列数までの範囲の整数の変数を指定します。

variable

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

要件 LEXPERM関数を実行する前にこれらの変数を初期化します。

詳細

重複しない順列数の決定

後続の式で使用するために定義する変数を次に示します。
N
置換される変数の数(引数の数から1を引いた数)を指定します。
M
置換される変数間の欠損値の数を指定します。
d
引数間の重複しない非欠損値の数を指定します。
Ni
i=1からi=dの場合、Niはi番目の重複しない値のインスタンス数を指定します。
引数の非欠損値の重複しない順列数は、次のように表されます。
注: LEXPERM関数は、%SYSFUNCマクロを使用して実行できません。

LEXPERM処理

引数countが1からPまでの各整数値をとるループでLEXPERM関数を使用します。LEXPERM関数がゼロ未満の値を返すときにループが終了するのであれば、Pを計算する必要はありません。
1=count<Pの場合、次のアクションが実行されます。
  • 引数の種類と長さに不整合がないか確認が行われます。
  • M個の欠損値が最後のM個の引数に割り当てられます。
  • countの後の最初のN-M個の引数にN-M個の非欠損値が昇順で割り当てられます。
  • LEXPERMは1を返します。
1<count<=Pの場合、次のアクションが実行されます。
  • 次の非欠損値の重複しない順列が辞書式順序で生成されます。
  • variable-1からvariable-Iは変更されず、variable-Jが変更された場合(J=I+1)、LEXPERMはJを返します。
count>Pの場合、LEXPERMは–1を返します。
LEXPERM関数を実行する場合に第1引数の順序が間違っていると、その結果は役に立たない場合があります。特に、変数を初期化した直後に第1引数KでLEXPERM関数を実行すると、K番目の順列は取得されません(Kが1の場合を除く)。K番目の順列を取得するには、LEXPERMをK回実行する必要があります。第1引数には、1からKまで正しい順序で値が取られます。

比較

SASには、すべての順列を生成する3つの関数またはCALLルーチンがあります。
  • ALLPERM: 複数の変数の値(欠損値または非欠損値)の考えられるすべての順列を生成します。各順列は、前の順列に基づいて形成されます(2つの連続する値を交換)。
  • LEXPERM:複数の変数の非欠損値の重複しないすべての順列を生成します。順列は、辞書式順序で生成されます。
  • LEXPERK: N個の変数の非欠損値からK個の重複しないすべての順列を生成します。順列は、辞書式順序で生成されます。
ALLPERMは最も速い関数およびCALLルーチンです。最も遅いのはLEXPERKです。

LEXPERM関数の例を次に示します。
data _null_;
   array x[6] $1 ('X' 'Y' 'Z' ' ' 'Z' 'Y');
   nfact=fact(dim(x));
   put +3 nfact=;
   do i=1 to nfact;
      rc=lexperm(i, of x[*]);
      put i 5. +2 rc= +2 x[*];
      if rc<0 then leave;
   end;
run;
次の出力がログに書き込まれます。
   nfact=720 1 rc=1 X Y Y Z Z 2 rc=3 X Y Z Y Z 3 rc=4 X Y Z Z Y 4 rc=2 X Z Y Y Z 5 rc=4 X Z Y Z Y 6 rc=3 X Z Z Y Y 7 rc=1 Y X Y Z Z 8 rc=3 Y X Z Y Z 9 rc=4 Y X Z Z Y 10 rc=2 Y Y X Z Z 11 rc=3 Y Y Z X Z 12 rc=4 Y Y Z Z X 13 rc=2 Y Z X Y Z 14 rc=4 Y Z X Z Y 15 rc=3 Y Z Y X Z 16 rc=4 Y Z Y Z X 17 rc=3 Y Z Z X Y 18 rc=4 Y Z Z Y X 19 rc=1 Z X Y Y Z 20 rc=4 Z X Y Z Y 21 rc=3 Z X Z Y Y 22 rc=2 Z Y X Y Z 23 rc=4 Z Y X Z Y 24 rc=3 Z Y Y X Z 25 rc=4 Z Y Y Z X 26 rc=3 Z Y Z X Y 27 rc=4 Z Y Z Y X 28 rc=2 Z Z X Y Y 29 rc=3 Z Z Y X Y 30 rc=4 Z Z Y Y X 31 rc=-1 Z Z Y Y X  

関連項目:

関数:
前のページ|次のページ|ページの先頭へ