Help using Base SAS procedures

How to have a varying sample size in PROC surveyselect.

Accepted Solution Solved
Reply
Contributor
Posts: 21
Accepted Solution

How to have a varying sample size in PROC surveyselect.

I am currently using PROC surveyselect to pull a random sample from a data set using this code:

 

proc surveyselect data= out.care_statement_all_q&rptqtr. 
method=srs n=60 out=out.care_statement_q&rptqtr.; 
run;

 

Is there a way to set the size as a range.  Every run the user would like a varying sample size between 60-70.   This is part of an automated process so I would like there to be no manual involvement.


Accepted Solutions
Solution
‎03-10-2016 02:49 PM
Super User
Posts: 9,662

Re: How to have a varying sample size in PROC surveyselect.

Make a random macro variable :

 

%let n=%sysevalf(%sysfunc(rand(uniform))*10+60,i);
%put NOTE: n=&n;

proc surveyselect ............... n=&n ........

View solution in original post


All Replies
Super User
Posts: 10,458

Re: How to have a varying sample size in PROC surveyselect.

What environment is the user using to run the code? Base SAS, Enterprise Guide, something else?

Contributor
Posts: 21

Re: How to have a varying sample size in PROC surveyselect.

Sorry for the lack of details.  It is currently being run in SAS EG on our companies UNIX envrionment.  I am new to SAS programming and not sure all the correct terms.  It is executed from an auto file that kicks off automatically.

Respected Advisor
Posts: 4,640

Re: How to have a varying sample size in PROC surveyselect.

Create 11 fake strata in your data 

 

data fakeStrataCare;
set out.care_statement_all_q&rptqtr.;
do stratum=60 to 70;
	output;
	end;
run;

proc sort data=fakeStrataCare; by stratum; run;

and call proc surveyselect with a different sample size for each stratum

 

proc surveyselect data= fakeStrataCare 
method=srs n=(60 61 62 63 64 65 66 67 68 69 70) out=out.care_statement_q&rptqtr.; 
strata stratum;
run;

(untested)

 

PG
Solution
‎03-10-2016 02:49 PM
Super User
Posts: 9,662

Re: How to have a varying sample size in PROC surveyselect.

Make a random macro variable :

 

%let n=%sysevalf(%sysfunc(rand(uniform))*10+60,i);
%put NOTE: n=&n;

proc surveyselect ............... n=&n ........
Contributor
Posts: 21

Re: How to have a varying sample size in PROC surveyselect.

Thank you so much Ksharp.  This worked perfectly and is simple for what I am doing.  Could you explain it a bit so if I never needed to use this again but for varying sample size.  Like if I need between 30-40 how would I change the numbers.

Super User
Posts: 9,662

Re: How to have a varying sample size in PROC surveyselect.

%let n=%sysevalf(%sysfunc(rand(uniform))*10+30,i);

 

int(rand('uniform')*10)  will generate the random number  0,1,2,3,4,5,6,7,8,9

 

here 10 is the range  between 30 and 40 .

here 30 is the base of range(or left value of range)  .

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 6 replies
  • 368 views
  • 0 likes
  • 4 in conversation