- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Make a random macro variable :
%let n=%sysevalf(%sysfunc(rand(uniform))*10+60,i);
%put NOTE: n=&n;
proc surveyselect ............... n=&n ........
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
What environment is the user using to run the code? Base SAS, Enterprise Guide, something else?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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)
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Make a random macro variable :
%let n=%sysevalf(%sysfunc(rand(uniform))*10+60,i);
%put NOTE: n=&n;
proc surveyselect ............... n=&n ........
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
%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) .