Functions and CALL Routines |
Category: | Combinatorial |
Restriction: | The LEXCOMBI function cannot be executed when you use the %SYSFUNC macro. |
Syntax | |
Arguments | |
Details | |
Comparisons | |
Examples | |
See Also |
Syntax |
LEXCOMBI(n, k, index-1, ..., k) |
is a numeric constant, variable, or expression that specifies the total number of objects.
is a numeric constant, variable, or expression that specifies the number of objects in each combination.
is a numeric variable that contains indices of the objects in the combination that is returned. Indices are integers between 1 and n inclusive.
Details |
Before the first execution of the LEXCOMBI function, complete one of the following tasks:
Set index-1 equal to zero or to a missing value.
Initialize index-1 through index-k to distinct integers between 1 and n inclusive.
The number of combinations of n objects taken k at a time can be computed as COMB(n,k). To generate all combinations of n objects taken k at a time, execute the LEXCOMBI function in a loop that executes COMB(n,k) times.
In the LEXCOMBI function, the returned value indicates which, if any, indices changed. If index-1 through index-i did not change, but index-j did change, wherej=i+1, then LEXCOMBI returnsi. If LEXCOMBI is called after the last combinations in lexicographic order have been generated, then LEXCOMBI returns -1.
Comparisons |
The LEXCOMBI function generates all combinations of the indices of n objects taken k at a time in lexicographic order. The ALLCOMBI function generates all combinations of the indices of n objects taken k at a time in a minimum change order.
Examples |
The following example uses the LEXCOMBI function to generate combinations of indices in lexicographic order.
data _null_; array x[5] $3 ('ant' 'bee' 'cat' 'dog' 'ewe'); array c[3] $3; array i[3]; n=dim(x); k=dim(i); i[1]=0; ncomb=comb(n,k); do j=1 to ncomb+1; rc=lexcombi(n, k, of i[*]); do h=1 to k; c[h]=x[i[h]]; end; put @4 j= @10 'i= ' i[*] +3 'c= ' c[*] +3 rc=; end; run;
SAS writes the following output to the log:
j=1 i= 1 2 3 c= ant bee cat rc=1 j=2 i= 1 2 4 c= ant bee dog rc=3 j=3 i= 1 2 5 c= ant bee ewe rc=3 j=4 i= 1 3 4 c= ant cat dog rc=2 j=5 i= 1 3 5 c= ant cat ewe rc=3 j=6 i= 1 4 5 c= ant dog ewe rc=2 j=7 i= 2 3 4 c= bee cat dog rc=1 j=8 i= 2 3 5 c= bee cat ewe rc=3 j=9 i= 2 4 5 c= bee dog ewe rc=2 j=10 i= 3 4 5 c= cat dog ewe rc=1 j=11 i= 3 4 5 c= cat dog ewe rc=-1
See Also |
Functions and CALL Routines: |
Copyright © 2011 by SAS Institute Inc., Cary, NC, USA. All rights reserved.