LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (May 2003, week 3)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Fri, 16 May 2003 17:09:07 +0000
Reply-To:     sashole@bellsouth.net
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         Paul Dorfman <paul_dorfman@HOTMAIL.COM>
Subject:      Re: Generate Random Number???
Comments: To: tim19972003@YAHOO.COM
Content-Type: text/plain; format=flowed

>From: Tim Corn <tim19972003@YAHOO.COM> > >Hello, > >I want to generate an unique random number for each observation of a sas >dataset. And the >range of the random number should be 1~10,000. How can I >do this? I tried using ranuni >function, but the numbers are less than 1. >Any suggetion? Thank in advance for your valuable >advice!

Tim,

Since you file cannot have more than 10,000 observations (else the random numbers in the [1:10000] range could not be unique), it is simplest to permute natural numbers from 1 to 10000 using a sort by another random variable, as Andy and others offered to do.

Now there have been array solutions by Harry and Daniel. However, as Howard pointed out, they require a massive number of retrials, especially as the process moves ot the end of file. A usual technique of avoiding this when sampling without replacement is to select from the population of decreasing size, where the element just selected is swapped with the top unused element:

114 data a ; 115 do var = 1 to 10000 ; output ; end ; 116 run ;

NOTE: The data set WORK.A has 10000 observations and 1 variables. NOTE: DATA statement used (Total process time):

117 data r ; 118 array nat ( 1 : 10000 ) _temporary_ ; 119 if _n_ = 1 then do _n_ = 1 to n ; 120 nat (_n_) = _n_ ; 121 end ; 122 set a nobs = n ; 123 _n_ = ceil ( ranuni(1) * n ) ; 124 random = nat (_n_) ; 125 nat (_n_) = nat (n) ; 126 n +- 1 ; 127 run ;

NOTE: There were 10000 observations read from the data set WORK.A. NOTE: The data set WORK.R has 10000 observations and 2 variables.

Kind regards, ----------------------------- Paul M. Dorfman Jacksonville, FL -----------------------------

_________________________________________________________________ Help STOP SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail


Back to: Top of message | Previous page | Main SAS-L page