Statistical programming, matrix languages, and more

Random draws without replacement

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 16
Accepted Solution

Random draws without replacement

I need to randomly choose k integers between 1 and T without replacement.

Here's what I've come up with:

T=60;

k=15;

/* random vector for choosing integers */

r = j(T,1,0);

call randgen(r,'uniform');


/* find indices from sorting r */

call sortndx( integers, r, {1});


/* take first k integers */

draw = integers[1:k];

I need to do it many times, and I'd rather avoid looping through this, so I'm wondering if anyone has a better solution.


Accepted Solutions
Solution
‎08-14-2013 03:11 PM
SAS Super FREQ
Posts: 3,408

Re: Random draws without replacement

There are many ways. Do you have SAS/IML 12.1 (SAS 9.3m2)? If so, use

s = sample(1:60, {15 100}, "WOR");

The sample space is 1:60.  The sample size is 15.  The number of independent draws is 100. The samplnig is done without replacement.

View solution in original post


All Replies
Solution
‎08-14-2013 03:11 PM
SAS Super FREQ
Posts: 3,408

Re: Random draws without replacement

There are many ways. Do you have SAS/IML 12.1 (SAS 9.3m2)? If so, use

s = sample(1:60, {15 100}, "WOR");

The sample space is 1:60.  The sample size is 15.  The number of independent draws is 100. The samplnig is done without replacement.

Occasional Contributor
Posts: 16

Re: Random draws without replacement

Perfect, thanks Rick. I made sure to update to 9.4 (12.3) after your recent blog post.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 303 views
  • 1 like
  • 2 in conversation