Statistical programming, matrix languages, and more

RANPERM function

Reply
N/A
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;
x={1,2,3};
seed=12;
call ranperm(seed,x);
print x;
quit;

Has anyone used this function successfully in IML?
SAS Super FREQ
Posts: 3,624

Re: RANPERM function

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
http://support.sas.com/forums/thread.jspa?threadID=7763&tstart=0

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;
end;
N/A
Posts: 0

Re: RANPERM function

Thanks!
Ask a Question
Discussion stats
  • 2 replies
  • 334 views
  • 0 likes
  • 2 in conversation