BICKIS@SASK.USASK.CA (Mikelis Bickis) (01/12/90)
/*
Here is some SAS code to generate a dataset containing all
the permutations of the integers 1 to n. Before invoking
the code you must %LET n= the number you want, and if you
want to give the dataset a name, you may %LET FILE= the name
you want. This really should be written up as a bona fide
macro, but our version of SAS doesn't seem to have the full
SAS MACRO capability---but that is another issue.
Mik Bickis
Dept. of Mathematics
University of Saskatchewan
Saskatoon
BICKIS@SASK.BITNET
bickis@sask.usask.ca
<( I use SAS 5.18 running on a VAX 6300 cluster under VMS 5.1 )>
*/
DATA &FILE;
ARRAY NUMBERS {*} I1-I&n;
ARRAY TALLIES {*} T1-T&n;
KEEP I1-I&n;
/* Generate list of integers in normal order */
DO J=1 TO &n; NUMBERS{J}=J; END;
OUTPUT;
MIX=1;
DO WHILE(MIX<&n);
/* cyclically permute first MIX+1 numbers */
HOLD=NUMBERS{1};
DO J=1 TO MIX;
NUMBERS{J}=NUMBERS{J+1};
END;
NUMBERS{MIX+1}=HOLD;
TALLIES{MIX}+1;
IF TALLIES{MIX}<MIX+1 THEN DO; OUTPUT; MIX=1; END;
/* If back to original permutation increment MIX */
ELSE DO; TALLIES{MIX}=0; MIX+1; END;
END;