HomeSAS PROGRAMS

Randomly select character values for each observation1 min read

Like Tweet Pin it Share Share Email

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.

Randomly select character values for each observation 1

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.

 Randomly select character values for each observation 3

 

Comments (0)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.