*
;
/*
From: darkiet@usa.pipeline.com(J T)
Newsgroups: comp.soft-sys.sas
Subject: Re: Generating Permutations
Date: 20 Jan 1996 18:05:54 GMT
Organization: Pipeline USA
You can try this little piece. If you change this macro to use array, you
might be able to break the 9-character limitation. The idea is to add onto
the same varable in the same dataset to get combinations and permutations.
Good luck.
*/
***********************************************;
* Produce all permutations ;
* Only work for STRING up to 9 characters long ;
***********************************************;
%macro permu(string,n,p);
data perm(keep=last);
do last=1 to &n;
output;
end;
run;
%let q=%eval(&p-1);
%do i=1 %to &q;
data perm(keep=current rename=(current=last));
set perm;
do i=1 to &n;
if index(trim(left(last)),trim(left(i)))=0 then do;
current=last*10+i;
output;
end;
end;
run;
%end;
proc sort data=perm nodup;
by last;
run;
data perm(keep=current);
set perm;
length current $ &p;
current=translate(trim(left(last)),"&string",'123456789');
run;
%mend;
%permu(ABCD,4,3);
proc print;
run;
*;