Generates all distinct permutations of the nonmissing values of several variables in lexicographic order.
Category: | Combinatorial |
Interaction: | When invoked by the %SYSCALL macro statement, CALL LEXPERM removes the quotation marks from its arguments. For more information, see Using CALL Routines and the %SYSCALL Macro Statement. |
specifies a numeric variable that has an integer value that ranges from 1 to the number of permutations.
specifies either all numeric variables, or all character variables that have the same length. The values of these variables are permuted by LEXPERM.
Requirement | Initialize these variables before you call the LEXPERM routine. |
data _null_; array x[4] $3 ('ant' 'bee' 'cat' 'dog'); n=dim(x); nfact=fact(n); do i=1 to nfact; call lexperm(i, of x[*]); put i 5. +2 x[*]; end; run;
1 ant bee cat dog 2 ant bee dog cat 3 ant cat bee dog 4 ant cat dog bee 5 ant dog bee cat 6 ant dog cat bee 7 bee ant cat dog 8 bee ant dog cat 9 bee cat ant dog 10 bee cat dog ant 11 bee dog ant cat 12 bee dog cat ant 13 cat ant bee dog 14 cat ant dog bee 15 cat bee ant dog 16 cat bee dog ant 17 cat dog ant bee 18 cat dog bee ant 19 dog ant bee cat 20 dog ant cat bee 21 dog bee ant cat 22 dog bee cat ant 23 dog cat ant bee 24 dog cat bee ant
%macro test; %let x1=ant; %let x2=baboon; %let x3=baboon; %let x4=hippopotamus; %let n=4; %let nperm=%sysfunc(perm(4)); %do j=1 %to &nperm; %syscall lexperm(j,x1,x2,x3,x4); %let jfmt=%qsysfunc(putn(&j,5.)); %put &jfmt: &x1 &x2 &x3 &x4 sysinfo=&sysinfo; %if &sysinfo<0 %then %let j=%eval(&nperm+1); %end; %mend; %test;
1: ant baboon baboon hippopotamus sysinfo=1 2: ant baboon hippopotamus baboon sysinfo=3 3: ant hippopotamus baboon baboon sysinfo=2 4: baboon ant baboon hippopotamus sysinfo=1 5: baboon ant hippopotamus baboon sysinfo=3 6: baboon baboon ant hippopotamus sysinfo=2 7: baboon baboon hippopotamus ant sysinfo=3 8: baboon hippopotamus ant baboon sysinfo=2 9: baboon hippopotamus baboon ant sysinfo=3 10: hippopotamus ant baboon baboon sysinfo=1 11: hippopotamus baboon ant baboon sysinfo=2 12: hippopotamus baboon baboon ant sysinfo=3 13: hippopotamus baboon baboon ant sysinfo=-1