n個の変数を同時にk個使用するときの、重複しない非欠損値のすべての組み合わせを辞書式順序で生成します。
カテゴリ: | 組み合わせ |
操作: | %SYSCALLマクロステートメントで呼び出されると、CALL LEXCOMBの引数から引用符が削除されます。詳細については、 CALLルーチンと%SYSCALLマクロステートメントを使用する を参照してください。 |
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; call lexcomb(j, k, of x[*]); put j 5. +3 x1-x3; end; run;
1 ant bee cat 2 ant bee dog 3 ant bee ewe 4 ant cat dog 5 ant cat ewe 6 ant dog ewe 7 bee cat dog 8 bee cat ewe 9 bee dog ewe 10 cat dog ewe
%macro test; %let x1=ant; %let x2=baboon; %let x3=baboon; %let x4=hippopotamus; %let x5=zebra; %let k=2; %let ncomb=%sysfunc(comb(5, &k)); %do j=1 %to &ncomb; %syscall lexcomb(j, k, x1, x2, x3, x4, x5); %let jfmt=%qsysfunc(putn(&j, 5. )); %let pad=%qsysfunc(repeat(%str( ), 20-%length(&x1 &x2))); %put &jfmt: &x1 &x2 &pad sysinfo=&sysinfo; %if &sysinfo < 0 %then %let j=%eval(&ncomb+1); %end; %mend; %test
1: ant baboon sysinfo=1 2: ant hippopotamus sysinfo=2 3: ant zebra sysinfo=2 4: baboon baboon sysinfo=1 5: baboon hippopotamus sysinfo=2 6: baboon zebra sysinfo=2 7: hippopotamus zebra sysinfo=1 8: hippopotamus zebra sysinfo=-1