n個の変数値から一度にk個の変数値を取得する場合のすべての組み合わせを変化量の小さい順に生成します。
カテゴリ: | 組み合わせ |
整数の変数を指定します。変数には1から組み合わせ数までがループで割り当てられます。
各組み合わせの項目数を示す1からn(1とnを含む)までの整数の定数、変数または式を指定します。
すべての数値変数または同じ長さのすべての文字変数を指定します。これらの変数の値は置換されます。
制限事項 | 33個以内で項目を指定します。33個を超える項目の組み合わせを検出する必要がある場合は、CALL ALLCOMBIルーチンを使用します。 |
要件 | ALLCOMBルーチンを呼び出す前にこれらの変数を初期化します。 |
ヒント | ALLCOMBルーチンを呼び出すと、最初のk個の変数に1つの組み合わせの値が含まれます。 |
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; call allcomb(j, k, of x[*]); put j 5. +3 x1-x3; end; run;
1 ant bee cat 2 ant bee ewe 3 ant bee dog 4 ant cat dog 5 ant cat ewe 6 ant dog ewe 7 bee dog ewe 8 bee dog cat 9 bee ewe cat 10 dog ewe cat 11 dog ewe cat
%macro test; %let x1=ant; %let x2=-.1234; %let x3=1e10; %let x4=hippopotamus; %let x5=zebra; %let k=2; %let ncomb=%sysfunc(comb(5, &k)); %do j=1 %to &ncomb+1; %syscall allcomb(j, k, x1, x2, x3, x4, x5); %let jfmt=%qsysfunc(putn(&j, 5.)); %let pad=%qsysfunc(repeat(%str(),30-%length(&x1 &x2))); %put &jfmt: &x1 &x2 &pad sysinfo=&sysinfo; %end; %mend; %test
1: ant -0.1234 sysinfo=0 2: ant zebra sysinfo=2 3: ant hippopotamus sysinfo=2 4: ant 10000000000 sysinfo=2 5: -0.1234 10000000000 sysinfo=1 6: -0.1234 zebra sysinfo=2 7: -0.1234 hippopotamus sysinfo=2 8: 10000000000 hippopotamus sysinfo=1 9: 10000000000 zebra sysinfo=2 10: hippopotamus zebra sysinfo=1 11: hippopotamus zebra sysinfo=-1