BookmarkSubscribeRSS Feed
mili
Fluorite | Level 6

Hello,

 

I have a dataset called "boston" which has 100 observations, I'd like to create 2 datasets of 100 observations by sampling with replacement my original dataset "boston". I am using this code:

 

%let rep = 2;

  proc surveyselect data = boston out = resample;

  seed = 1347 method = urs

  samprate = 1 outhits rep = &rep;

run;

ods listing close;

 

This creates a dataset called "resample" which has a variable called "replicate" (= 1 or 2)  which identifies my 100 observations for each of my 2 samplings. However, I would like to output 2 datasets each with its own sampling of 100 observations, such as resample1 and resample2. How can I do that?

 

Thanks very much!

2 REPLIES 2
ballardw
Super User

this might get you started:

You don't want to set a seed if you want different samples.

SAMPSIZE may be more reliable than SAMPRATE if you want a specific number of resultant selections.

 

Here's one way with an example call with a data set you should have to see if it is working correctly.

The reps and size are defaults that will be used if not supplied with the call. The indataset must exist, reps cannot be set to less than 1, size should be an integer > 0.

%macro resample (indataset=, outdata=, reps=2, size=100);
%do i=1 %to &reps;

   proc surveyselect data = &indataset. out = &outdata.&i. noprint
     method = urs
     sampsize = &size outhits ;
   run;

%end;
%mend;

%resample (indataset=sashelp.class, outdata=work.resample, reps=2,size=5);

if you need this more flexible, such as the method you can parameters following this pattern but too many will likely complicate the code trying to get interactions straight.

 

Did you examine an output set with rep=2 to make sure it looked correct? The values of rep would  likely not meet your want and the number of records is another issue.

Reeza
Super User

Although you can do this, it's generally not a good idea. Because then to process things further you need to then use a macro to have it run over each data set versus just using a BY statement in your procedure. 

 

If you're doing bootstrap or simulation this may be worth reading, it goes over how to simulate data in SAS and why you don't want to do it this way, though it covers both approaches.

http://www2.sas.com/proceedings/forum2007/183-2007.pdf

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 391 views
  • 0 likes
  • 3 in conversation