前のページ|次のページ

CALL RANCOMBルーチン

引数の値を置換し、n個の値のうちk個のランダムな組み合わせを返します。

カテゴリ: 組み合わせ

構文

CALL RANCOMB(seed, k, variable-1 <, variable–2, ...>);

必須引数

シード

乱数シードが含まれる数値変数です。シードの詳細については、 シード値を参照してください。

k

ランダムな組み合わせに含める値の数です。

variable

同じ長さのすべての数値変数またはすべての文字変数を指定します。これら変数の K個の値がランダムに置換されます。

詳細

基本

n個の変数がある場合、CALL RANCOMBでは最初のk個の値を昇順で並べ替えて、n個の値のうちk個のランダムな組み合わせを作成する方法で変数の値を置換します。つまり、n個の値のうちk個のすべてのn!/(k!(n-k)!)の組み合わせは、最初のk個の値が返されることと等しく起こりえます。
CALL RANCOMBルーチンの実行中にエラーが発生すると、次の両方の値が設定されます。
  • &SYSERRには4よりも大きい値が割り当てられます。
  • &SYSINFOには-100よりも小さい値が割り当てられます。
エラーがない場合、&SYSERRおよび&SYSINFOはゼロに設定されます。

マクロとCALL RANCOMBを使用する

%SYSCALLマクロを使用するときにCALL RANCOMBルーチンを呼び出せます。この場合、変数の引数を同一の種類または長さとする必要はありません。ただし、返される最初のk個の値に文字と数値の両方が含まれる場合、それらの値は並べ替えられません。%SYSCALLで引数が数値であることが識別されると、%SYSCALLは戻り値の形式を調整します。

例1: DATAステップでCALL RANCOMBを使用する

DATAステップでCALL RANCOMBルーチンを使用して、指定された値のランダムな組み合わせを生成する方法の例を次に示します。
data _null_;
   array x x1-x5 (1 2 3 4 5);
   seed=1234567890123;
   do n=1 to 10;
      call rancomb(seed, 3, of x1-x5);
      put seed= @20 ' x= ' x1-x3;
   end;
run;
次の出力がログに書き込まれます。
seed=1332351321 x= 2 4 5 seed=829042065 x= 1 3 4 seed=767738639 x= 2 3 5 seed=1280236105 x= 2 4 5 seed=670350431 x= 1 2 5 seed=1956939964 x= 2 3 4 seed=353939815 x= 1 3 4 seed=1996660805 x= 1 2 5 seed=1835940555 x= 2 4 5 seed=910897519 x= 2 3 4

例2: マクロとCALL RANCOMBを使用する

マクロで使用されるCALL RANCOMBルーチンの例を次に示します。
%macro test;
   %let x1=ant;
   %let x2=-.1234;
   %let x3=1e10;
   %let x4=hippopotamus;
   %let x5=zebra;
   %let k=3;
   %let seed=12345;
   %do j=1 %to 10;
      %syscall rancomb(seed, k, x1, x2, x3, x4, x5);
      %put j=&j   &x1 &x2 &x3;
   %end;
   %mend;
      
%test;
次の出力がログに書き込まれます。
j=1 -0.1234 hippopotamus zebra j=2 hippopotamus -0.1234 10000000000 j=3 hippopotamus ant zebra j=4 -0.1234 zebra ant j=5 -0.1234 ant hippopotamus j=6 10000000000 hippopotamus ant j=7 10000000000 hippopotamus ant j=8 ant 10000000000 -0.1234 j=9 zebra -0.1234 10000000000 j=10 zebra hippopotamus 10000000000

関連項目:

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