In the example dataset – SASHELP.HEART, you want to create a new variable – Activity_status and assign one of three values of (‘High’, ‘MEDIUM’, ‘LOW’), at random to each observation. You can achieve these using 2 methods.
Method 1: Using an array
data heart(drop=id _1-_3 keep=status sex bp_status chol_status activity_status);
set sashelp.heart(obs=10);
array _{3} $ ('Low', 'Medium', 'High');
id=rand('integer', 1, dim(_));
activity_status=_[id];
run;
The above method uses an array to hold the three-character values and creates three character variables – _1,_2,_3. The next statement id=rand('integer',1,dim(_))
creates a variable holding random numbers between 1 and 3 and then activity_status variable is used to assign the corresponding values.
Method 2: Using CHOOSEC function
data heart (keep=status sex bp_status chol_status activity_status);
set sashelp.heart;
activity_status=choosec(ceil(ranuni(0)*3), "High", "Medium", "Low");
run;
The first argument of the CHOOSEC function is a numeric value that specifies which character value to choose in the list of arguments that follow.
One way to generate a random integer from 1 to n is to first use the RANUNI function to generate a random value between 0 and 1. Next, you multiply this value by n to generate a random number between 0 and n.
Finally, the CEIL function rounds up positive numbers to the next highest integer.
For example, if the random function generates a value of .1, 3 times .1 = .3. This, rounded to the next highest integer, gives you a 1. An alternative expression for a random integer from 1 to n is (int(ranuni(0)*3 + 1)
.
Once you have generated a random integer from 1 to 3, the CHOOSEC function will return the name corresponding with that selection.