<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to generate multiple dataset by loop function in SAS in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601418#M173955</link>
    <description>&lt;P&gt;I think you can use the option REPS=100 to obtain the 100 desired samples, they will be in one data set, but you can split them up if necessary (probably not necessary).&lt;/P&gt;</description>
    <pubDate>Mon, 04 Nov 2019 16:05:34 GMT</pubDate>
    <dc:creator>PaigeMiller</dc:creator>
    <dc:date>2019-11-04T16:05:34Z</dc:date>
    <item>
      <title>How to generate multiple dataset by loop function in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601415#M173953</link>
      <description>&lt;P&gt;Hi, I want to generate 100 dataset with 25 random numbers which are collected from origin dataset by survey functions by loop.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the Origin dataset:&lt;/P&gt;&lt;DIV class="branch"&gt;&lt;DIV&gt;&lt;DIV align="center"&gt;Obs i x b dummy a12345678910111213141516171819202122232425262728293031323334353637383940 &lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1740&lt;/TD&gt;&lt;TD&gt;971&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2600&lt;/TD&gt;&lt;TD&gt;260&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1003&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4687&lt;/TD&gt;&lt;TD&gt;970&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1004&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3172&lt;/TD&gt;&lt;TD&gt;532&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1005&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1200&lt;/TD&gt;&lt;TD&gt;67&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4278&lt;/TD&gt;&lt;TD&gt;524&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4414&lt;/TD&gt;&lt;TD&gt;68&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1008&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4829&lt;/TD&gt;&lt;TD&gt;298&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1009&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2091&lt;/TD&gt;&lt;TD&gt;690&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1010&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4908&lt;/TD&gt;&lt;TD&gt;227&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1011&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3753&lt;/TD&gt;&lt;TD&gt;413&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3235&lt;/TD&gt;&lt;TD&gt;288&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1013&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2904&lt;/TD&gt;&lt;TD&gt;845&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1014&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3539&lt;/TD&gt;&lt;TD&gt;591&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1015&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3331&lt;/TD&gt;&lt;TD&gt;378&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3914&lt;/TD&gt;&lt;TD&gt;507&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1017&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4725&lt;/TD&gt;&lt;TD&gt;930&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1018&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3359&lt;/TD&gt;&lt;TD&gt;298&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2565&lt;/TD&gt;&lt;TD&gt;473&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1020&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3719&lt;/TD&gt;&lt;TD&gt;169&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1021&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1667&lt;/TD&gt;&lt;TD&gt;872&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1022&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2196&lt;/TD&gt;&lt;TD&gt;935&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4602&lt;/TD&gt;&lt;TD&gt;569&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1024&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1199&lt;/TD&gt;&lt;TD&gt;136&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1025&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3046&lt;/TD&gt;&lt;TD&gt;434&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1026&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1705&lt;/TD&gt;&lt;TD&gt;666&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1027&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2620&lt;/TD&gt;&lt;TD&gt;125&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1028&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2814&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1029&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3300&lt;/TD&gt;&lt;TD&gt;739&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1030&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2760&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1031&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3090&lt;/TD&gt;&lt;TD&gt;344&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1032&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1091&lt;/TD&gt;&lt;TD&gt;713&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1033&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4749&lt;/TD&gt;&lt;TD&gt;446&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1034&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4788&lt;/TD&gt;&lt;TD&gt;713&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1035&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1414&lt;/TD&gt;&lt;TD&gt;176&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1036&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2076&lt;/TD&gt;&lt;TD&gt;615&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1037&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2683&lt;/TD&gt;&lt;TD&gt;72&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1038&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2434&lt;/TD&gt;&lt;TD&gt;712&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1039&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1760&lt;/TD&gt;&lt;TD&gt;148&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1040&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3248&lt;/TD&gt;&lt;TD&gt;271&lt;/TD&gt;&lt;TD&gt;9999&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the code of select 1 dataset from the origin dataset:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc surveyselect data=ORD&lt;/P&gt;&lt;P&gt;method=pps sampsize=25 out = randomsurvey_PPS;&lt;BR /&gt;size b ;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a function to generate 100 datasets with survey function?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I suppose the code structure should be :&lt;/P&gt;&lt;P&gt;Do i = 1 to 100;&lt;/P&gt;&lt;P&gt;proc surveryselect data = ORD&lt;/P&gt;&lt;P&gt;method = pps&lt;/P&gt;&lt;P&gt;out = dataout i ?&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your help!&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2019 15:48:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601415#M173953</guid>
      <dc:creator>Gustavo8</dc:creator>
      <dc:date>2019-11-04T15:48:05Z</dc:date>
    </item>
    <item>
      <title>Re: How to generate multiple dataset by loop function in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601418#M173955</link>
      <description>&lt;P&gt;I think you can use the option REPS=100 to obtain the 100 desired samples, they will be in one data set, but you can split them up if necessary (probably not necessary).&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2019 16:05:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601418#M173955</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-11-04T16:05:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to generate multiple dataset by loop function in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601431#M173962</link>
      <description>&lt;P&gt;Using cars (sampling by weight) as an example:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	set sashelp.cars;
run;

*naive macro approach -- not using REPS option;
%macro loop(dsin=,dsoutpfx=,n=);
	%do i=1 %to &amp;amp;n. %by 1;
		proc surveyselect noprint data=&amp;amp;dsin.
		method=pps sampsize=25 out = &amp;amp;dsoutpfx._&amp;amp;i.;
		size weight;
		run;
	%end;
	proc sql; drop table tempsortsize; quit;
%mend;

%loop(dsin=have,dsoutpfx=smple,n=5);

* using REPS option;
proc surveyselect noprint data=have
method=pps sampsize=25 reps=5 out = samples;
size weight;
run;

*(splitting if necessary);
data _null_;
	do i=1 to 5;
		call execute(
			cats(
				'data smple_',i,'; 
					set samples(where=(replicate=',i,')); 
				 run;'
			)
		);
	end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;-unison&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2019 16:31:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601431#M173962</guid>
      <dc:creator>unison</dc:creator>
      <dc:date>2019-11-04T16:31:30Z</dc:date>
    </item>
    <item>
      <title>Re: How to generate multiple dataset by loop function in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601506#M173995</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/298157"&gt;@Gustavo8&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;As suggested by &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/10892"&gt;@PaigeMiller&lt;/a&gt;&amp;nbsp;and &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/270457"&gt;@unison&lt;/a&gt;, generate the entire thing using REPS=100. I can't imagine why you would need to split it into 100 chunks but if you really want to do it dynamically in a single step, the hash object is your best friend. Note that below REP=5 is used instead of 100 for the sake of sanity.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                                                                                                                             
  do i = 1001 to 1050 ;                                                                                                                 
    x = 0 ; b + 2 ; dummy + 1 ;                                                                                                         
    output ;                                                                                                                            
  end ;                                                                                                                                 
run ;                                                                                                                                   
                                                                                                                                        
proc surveyselect noprint data=have out=samples method=pps sampsize=25 reps=5 ;                                                         
  size b ;                                                                                                                              
run ;                                                                                                                                   
                                                                                                                                        
data _null_ ;                                                                                                                           
  if _n_ = 1 then do ;                                                                                                                  
    dcl hash h (dataset:"samples(obs=0)", multidata:"y", ordered:"a") ;                                                                 
    h.definekey ("replicate") ;                                                                                                         
    h.definedata (all:"y") ;                                                                                                            
    h.definedone () ;                                                                                                                   
  end ;                                                                                                                                 
  do until (last.replicate) ;                                                                                                           
    set samples ;                                                                                                                       
    by replicate ;                                                                                                                      
    h.add() ;                                                                                                                           
  end ;                                                                                                                                 
  h.output (dataset: "sample" || put (_n_, z3.)) ;                                                                                      
  h.clear() ;                                                                                                                           
run ;          
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The output data set names are auto-created as sample001, sample002, et al. to make them appear properly sorted by name when viewed in the library. You can change that and/or shape the names the way you want by editing the character expression assigned to the DATASET argument tag in the OUTPUT method call.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2019 20:31:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-generate-multiple-dataset-by-loop-function-in-SAS/m-p/601506#M173995</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-11-04T20:31:11Z</dc:date>
    </item>
  </channel>
</rss>

