Previous Page | Next Page

Functions and CALL Routines

CALL RANPERM Routine



Randomly permutes the values of the arguments.
Category: Combinatorial

Syntax
Arguments
Details
Using CALL RANPERM with Macros
Examples
Example 1: Using CALL RANPERM in a DATA Step
Example 2: Using CALL RANPERM with a Macro
See Also

Syntax

CALL RANPERM(seed, variable-1<, variable-2, ...>);

Arguments

seed

is a numeric variable that contains the random number seed. For more information about seeds, see Seed Values.

variable

specifies all numeric variables or all character variables that have the same length. The values of these variables are randomly permuted.


Details


Using CALL RANPERM with Macros

You can call the RANPERM 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, then %SYSCALL reformats the returned value.

If an error occurs during the execution of the CALL RANPERM routine, then both of the following values are set:

If there are no errors, then &SYSERR and &SYSINFO are set to zero.


Examples


Example 1: Using CALL RANPERM in a DATA Step

The following example generates random permutations of given values by using the CALL RANPERM routine.

data _null_;
      array x x1-x4 (1 2 3 4);
      seed = 1234567890123;
      do n=1 to 10;
         call ranperm(seed, of x1-x4);
         put seed= @20 ' x= ' x1-x4;
      end;
run;

Output from Using the CALL RANPERM Routine in a DATA Step

seed=1332351321     x= 1 3 2 4
seed=829042065      x= 3 4 2 1
seed=767738639      x= 4 2 3 1
seed=1280236105     x= 1 2 4 3
seed=670350431      x= 2 1 4 3
seed=1956939964     x= 2 4 3 1
seed=353939815      x= 4 1 2 3
seed=1996660805     x= 4 3 1 2
seed=1835940555     x= 4 3 2 1
seed=910897519      x= 3 2 1 4

Example 2: Using CALL RANPERM with a Macro

The following is an example of the CALL RANPERM routine that is used with the %SYSCALL macro.

%macro test;
   %let x1=ant;
   %let x2=-.1234;
   %let x3=1e10;
   %let x4=hippopotamus;
   %let x5=zebra;
   %let seed = 12345;
   %do j=1 %to 10;
      %syscall ranperm(seed, x1, x2, x3, x4, x5);
      %put j=&j   &x1 &x2 &x3;
   %end;
   %mend;
      
%test;

Output from Using the CALL RANPERM Routine with a Macro

j=1   zebra ant hippopotamus
j=2   10000000000 ant -0.1234
j=3   -0.1234 10000000000 ant
j=4   hippopotamus ant zebra
j=5   -0.1234 zebra 10000000000
j=6   -0.1234 hippopotamus ant
j=7   zebra ant -0.1234
j=8   -0.1234 hippopotamus ant
j=9   ant -0.1234 hippopotamus
j=10   -0.1234 zebra 10000000000

See Also

Functions and CALL Routines:

RAND Function

CALL ALLPERM Routine

CALL RANPERK Routine

Previous Page | Next Page | Top of Page