- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to assign random numbers 1-18 as a new variable to my dataset.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
X = rand(‘integer’, 1, 18);
If your version doesn’t support this (check under the RAND() function), you can use a modification using the RANUNI() function.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The random functions create a value between 0 and 1. If you want values between 1 - 18 then just multiply the value by 18 and then use the ceil() function to shift the result to the next higher integer. Below a code sample using ranuni().
data test;
do i=1 to 100;
ran_num=ceil(ranuni(1)*18);
output;
end;
stop;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
X = rand(‘integer’, 1, 18);
If your version doesn’t support this (check under the RAND() function), you can use a modification using the RANUNI() function.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Never knew the integer option in rand function. Didn't see it in doc either. Nice. Does it pick on a uniform distribution?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The "Integer" distribution has been introduced in SAS 9.4M5 (according to the last comment in https://blogs.sas.com/content/iml/2015/10/05/random-integers-sas.html). Yes, it creates random values "from the discrete uniform distribution on a finite set of integers." (documentation)
For arbitrary random numbers in a range [a,b] there are new optional arguments a, b in RAND('UNIFORM',a,b). They were available, but not yet documented in release 9.4M2.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Merci !