Statistical programming, matrix languages, and more

RANPERM function

Not applicable
Posts: 0

RANPERM function

I am unable to get the RANPERM function to work in IML. I have used it successfully in a DATA step using an array, but it does not seem to work in IML on a matrix, even though SAS documentation says it should. For example, the code below produces no errors or warnings in the Log, yet has no effect on the matrix.

proc iml;
call ranperm(seed,x);
print x;

Has anyone used this function successfully in IML?
Posts: 4,176

Re: RANPERM function

Posted in reply to deleted_user
As explained in a previous thread, some Base SAS functions such as RANPERM expect a list of arguments instead of a vector of arguments. See the thread

If you know that you have three objects to permute, you can use RANPERM like this:
proc iml;
x1=1; x2=2; x3=3;
seed=12; /* or use 0 for random seed */
call ranperm(seed,x1, x2, x3);
print x1, x2, x3;

However, there is an easy way to create a permutation of a vector of an arbitrary size: generate random uniform numbers and then compute the RANK of those numbers to use as an index vector. For example:

x = {1,2,3};
call randseed(12);
u = j(nrow(x),1); /* allocate vector */
do i = 1 to 5;
call randgen(u, "uniform"); /* fill u with random uniform */
perm = x[ rank(u) ]; /* use RANK(u) to permute data */
print i perm;
Not applicable
Posts: 0

Re: RANPERM function

Ask a Question
Discussion stats
  • 2 replies
  • 2 in conversation