CALL RANPERK Routine
Permutes the values of the arguments and returns a random permutation of k out of n values.
| Category: | Combinatorial |
|---|---|
| Restriction: | This function is not supported in a DATA step that runs in CAS. |
| Note: | Argument types for arguments that are updated must match in CALL routines. All argument types must be CHAR, VARCHAR, or NUMERIC. If the argument types do not match, a warning is issued to the log. |
Table of Contents
Syntax
Required Arguments
seed
is a numeric variable that contains the random number seed. For more information about seeds, see Concepts.
k
is the number of values that you want to have in the random permutation.
variable
specifies all numeric variables or all character variables that have the same length. K values of these variables are randomly permuted.
Details
Using CALL RANPERK with Macros
You can call the RANPERK routine when you use the %SYSCALL macro. In this case, the variable arguments are not required to be the same type or length. If %SYSCALL identifies an argument as numeric, %SYSCALL reformats the returned value.
If an error occurs during the execution of the CALL RANPERK routine, both of the following values are set:
- &SYSERR is assigned a value that is greater than 4.
- &SYSINFO is assigned a value that is less than –100.
If there are no errors, &SYSERR and &SYSINFO are set to 0.
Examples
Example 1: Using CALL RANPERK in a DATA Step
The following example shows how to generate random permutations of given values by using the CALL RANPERK routine.
data _null_;
array x x1-x5 (1 2 3 4 5);
seed=1234567890123;
do n=1 to 10;
call ranperk(seed, 3, of x1-x5);
put seed=@20 ' x= ' x1-x3;
end;
run;
SAS writes the following results to the log:
seed=1332351321 x= 5 4 2 seed=829042065 x= 4 1 3 seed=767738639 x= 5 1 2 seed=1280236105 x= 3 2 5 seed=670350431 x= 4 3 5 seed=1956939964 x= 3 1 2 seed=353939815 x= 4 2 1 seed=1996660805 x= 3 4 5 seed=1835940555 x= 5 1 4 seed=910897519 x= 5 1 2
Example 2: Using CALL RANPERK with a Macro
Here is an example of the CALL RANPERK routine that is used with macros.
%macro test;
%let x1=ant;
%let x2=-.1234;
%let x3=1e10;
%let x4=hippopotamus;
%let x5=zebra;
%let k=3;
%let seed=12345;
%do j=1 %to 10;
%syscall ranperk(seed, k, x1, x2, x3, x4, x5);
%put j=&j &x1 &x2 &x3;
%end;
%mend;
%test;
SAS writes the following results to the log:
j=1 -0.1234 hippopotamus zebra j=2 hippopotamus -0.1234 10000000000 j=3 hippopotamus ant zebra j=4 -0.1234 zebra ant j=5 -0.1234 ant hippopotamus j=6 10000000000 hippopotamus ant j=7 10000000000 hippopotamus ant j=8 ant 10000000000 -0.1234 j=9 zebra -0.1234 10000000000 j=10 zebra hippopotamus 10000000000
See Also
-
Functions:
-
Call Routines: