前のページ|次のページ

CALL RANPERKルーチン

引数の値を置換し、n個の値のうちk個のランダムな順列を返します。

カテゴリ: 組み合わせ

構文

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

必須引数

シード

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

k

ランダムな順列に含める値の数です。

variable

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

詳細

マクロとCALL RANPERKを使用する

%SYSCALLマクロを使用するときにRANPERKルーチンを呼び出せます。この場合、変数の引数を同一の種類または長さとする必要はありません。SYSCALLで引数が数値であることが識別されると、%SYSCALLは戻り値の形式を調整します。
CALL RANPERKルーチンの実行中にエラーが発生すると、次の両方の値が設定されます。
  • &SYSERRには4よりも大きい値が割り当てられます。
  • &SYSINFOには-100よりも小さい値が割り当てられます。
エラーがない場合、&SYSERRおよび&SYSINFOはゼロに設定されます。

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

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

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

マクロで使用されるCALL RANPERKルーチンの例を次に示します。
%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 ranperk(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

関連項目:

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