<?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: Randomly assigning cases from a data set to different groups repeated times in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108003#M22460</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi PG,&lt;/P&gt;&lt;P&gt;How are you doing??&lt;/P&gt;&lt;P&gt;I ran your code with sashelp.class. Why only less than 16% with group=0?&amp;nbsp; I thought each group should have around 20%.&amp;nbsp; Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data simHEJ;&lt;/P&gt;&lt;P&gt;set sashelp.class;&lt;/P&gt;&lt;P&gt;do rep = 1 to 10000;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group = rand("UNIFORM");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=simHEJ; by rep; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc rank data=simHEJ out=simHEJgrp groups=5;&lt;/P&gt;&lt;P&gt;by rep;&lt;/P&gt;&lt;P&gt;var group;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc freq data=simHEJgrp ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; tables group/missing;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 27 Oct 2012 00:17:07 GMT</pubDate>
    <dc:creator>Linlin</dc:creator>
    <dc:date>2012-10-27T00:17:07Z</dc:date>
    <item>
      <title>Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107993#M22450</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi. I have a program that takes all cases from a data set and assigns them to 5 equal sized groups. Now, i want the program to do this a large amount of times so that i can assess the variance of a value in a specific group e.t.c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code is like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data SASUSER.HEJ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set SASUSER.HEJ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; srt=ranuni(999890);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=SASUSER.HEJ out=SASUSER.OUT(drop=srt); by srt; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data group1 group2 group3 group4 group5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; retain cnt ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set SASUSER.OUT&amp;nbsp; nobs=nobs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if _n_=1 then cnt= int(nobs/5);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if _n_&amp;lt;= cnt&amp;nbsp; then output group1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 2*cnt&amp;nbsp; then output group2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 3*cnt&amp;nbsp; then output group3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 4*cnt&amp;nbsp; then output group4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output group5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; drop cnt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In order to run this, say 10k times, i think i should make the names of the datasets (groups) partially determined by a macro variable and run a loop for 10k times which changes the dataset names by 1 for every iteration, so that the names changes from group1_1 to group1_2 to ... group 1_1000 e.t.c.&lt;/P&gt;&lt;P&gt;The problem is that i can't figure out how to program the loop correctly. Everything i try gives me different errors. And in the case when i don't get errors, the loop seems to just stop at the first iteration.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any input on this would be very much appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/Sven&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 15:01:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107993#M22450</guid>
      <dc:creator>SvenCrona</dc:creator>
      <dc:date>2012-10-26T15:01:34Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107994#M22451</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sven,&lt;/P&gt;&lt;P&gt;About the input dataset.&lt;/P&gt;&lt;P&gt;You have initially:&lt;/P&gt;&lt;P&gt; &lt;STRONG&gt;set SASUSER.HEJ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;What do you have in SASUSER.HEJ to begin with?&lt;/P&gt;&lt;P&gt;Do you want to generate a single random number in sasuser.hej or a set of random numbers in that dataset?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 15:35:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107994#M22451</guid>
      <dc:creator>joehinson</dc:creator>
      <dc:date>2012-10-26T15:35:21Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107995#M22452</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;%macro doit(n=);&lt;/P&gt;&lt;P&gt;%do loop= 1 %to &amp;amp;n;&lt;/P&gt;&lt;P&gt;data SASUSER.HEJ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set SASUSER.HEJ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; srt=ranuni(&amp;amp;loop); /* change the seed or the output is going to be the same*/&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=SASUSER.HEJ out=SASUSER.OUT(drop=srt); by srt; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data group1_&amp;amp;loop group2_&amp;amp;loop group3_&amp;amp;loop group4_&amp;amp;loop group5_&amp;amp;loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; retain cnt ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set SASUSER.OUT&amp;nbsp; nobs=nobs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if _n_=1 then cnt= int(nobs/5);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if _n_&amp;lt;= cnt&amp;nbsp; then output group1_&amp;amp;loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 2*cnt&amp;nbsp; then output group2_&amp;amp;loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 3*cnt&amp;nbsp; then output group3_&amp;amp;loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 4*cnt&amp;nbsp; then output group4_&amp;amp;loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output group5_&amp;amp;loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; drop cnt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%doit(n=3); /* to make 3 sets of loops*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Should create the output data sets. How you want to to the analysis you haven't provided enough information.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 15:55:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107995#M22452</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2012-10-26T15:55:16Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107996#M22453</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;A sample code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let n=10;&lt;/P&gt;&lt;P&gt;%macro test;&lt;BR /&gt;%do i=1 %to &amp;amp;n;&lt;BR /&gt;data HEJ;&lt;BR /&gt;&amp;nbsp; set sashelp.class;&lt;BR /&gt;&amp;nbsp; srt=ranuni(2*&amp;amp;i);&lt;BR /&gt;run;&lt;BR /&gt;proc sort data=HEJ out=OUT(drop=srt); by srt; run;&lt;/P&gt;&lt;P&gt;data group1_&amp;amp;i group2_&amp;amp;i group3_&amp;amp;i group4_&amp;amp;i group5_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; retain cnt ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set OUT&amp;nbsp; nobs=nobs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if _n_=1 then cnt= int(nobs/5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if _n_&amp;lt;= cnt&amp;nbsp; then output group1_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 2*cnt&amp;nbsp; then output group2_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 3*cnt&amp;nbsp; then output group3_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else if _n_&amp;lt;= 4*cnt&amp;nbsp; then output group4_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output group5_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; drop cnt;&lt;BR /&gt;run;&lt;BR /&gt;%end;&lt;BR /&gt;%mend;&lt;BR /&gt;%test&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 15:56:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107996#M22453</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2012-10-26T15:56:23Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107997#M22454</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I could be misunderstanding your requirements, but you can use the hash object to output to datasets arbitrarily, without having to use macros.&amp;nbsp; The main downside is that the dataset must be sorted by the group number, but you should be able to to this while maintaining the relative order within each group if that's important...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The below example generates some random data at the start, and appends a group number (filenum) field as it goes.&amp;nbsp; This field is included in the ultimate output, but if required we should be able to remove it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __jive_macro_name="quote" class="jive_text_macro jive_macro_quote" modifiedtitle="true"&gt;
&lt;P&gt;data Test;&lt;/P&gt;
&lt;P&gt;format key 8. x1-x4 y1-y4 21.3 filenum 8.;&lt;/P&gt;
&lt;P&gt;array n&lt;LI&gt; x1-x4 y1-y4;&lt;/LI&gt;&lt;/P&gt;
&lt;P&gt;filenum = 0;&lt;/P&gt;
&lt;P&gt;do key = 1 to 100000;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to dim(n);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n&lt;I&gt; = round(ranuni(-1)*50000,0.001);&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filenum + 1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if filenum &amp;gt; 5 then filenum = 1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;drop i;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;proc sort data=Test;&lt;/P&gt;
&lt;P&gt;by filenum;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;/P&gt;
&lt;P&gt;select&lt;/P&gt;
&lt;P&gt;name&lt;/P&gt;
&lt;P&gt;into :fieldlist separated by "','"&lt;/P&gt;
&lt;P&gt;from&lt;/P&gt;
&lt;P&gt;sashelp.vcolumn&lt;/P&gt;
&lt;P&gt;where&lt;/P&gt;
&lt;P&gt;libname='WORK' /*change to your library*/&lt;/P&gt;
&lt;P&gt;and memname='TEST' /*change to dataset*/&lt;/P&gt;
&lt;P&gt;;&lt;/P&gt;
&lt;P&gt;quit;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;data _null_;&lt;/P&gt;
&lt;P&gt;call symput("fieldlist","'&amp;amp;fieldlist.'");&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;%put &amp;amp;fieldlist.;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;data _null_;&lt;/P&gt;
&lt;P&gt;if 0 then set Test; /*set up PDV with formats, but load no data*/&lt;/P&gt;
&lt;P&gt;declare hash h (ordered:'a');&lt;/P&gt;
&lt;P&gt;h.defineKey(&amp;amp;fieldlist.);&lt;/P&gt;
&lt;P&gt;h.defineData(&amp;amp;fieldlist.);&lt;/P&gt;
&lt;P&gt;h.defineDone();&lt;/P&gt;
&lt;P&gt;do until (last.filenum);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set Test;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by filenum;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.add();&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;h.output(dataset: 'group' || strip(put(filenum,8.)));&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you want more groups split out, then just increase the value that filenum resets at.&amp;nbsp; As long as the "output" line in the final data step constructs a valid sas dataset name, then you can use this method to output any number of datasets you like, without specifying them in code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Of course your analysis will then require a macro to run your proc means (etc.) against all of those datasets, but hopefully this will be tidier for creating the datasets in the first place.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 18:03:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107997#M22454</guid>
      <dc:creator>DF</dc:creator>
      <dc:date>2012-10-26T18:03:40Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107998#M22455</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sven,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I, too, could be misunderstanding what you want, but wouldn't it be easier to analyze if you created one file that contained all of the group assignments over your 10,000 trials/simulations?&amp;nbsp; Does the following result in what you want to achieve?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let n=1000;&lt;/P&gt;&lt;P&gt;%macro combsort (arr1 =, arr2=,&amp;nbsp; order= &amp;lt;);&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop __:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do __g = hbound (&amp;amp;arr1) - 1 by 0 while (__s or __g &amp;gt; 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __g = int (__g / 1.3);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __g in (0&amp;nbsp;&amp;nbsp;&amp;nbsp; ) then __g =&amp;nbsp; 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if __g in (9, 10) then __g = 11;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __s = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do __j = lbound (&amp;amp;arr1) to hbound (&amp;amp;arr1) - __g;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __k = __j + __g;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if &amp;amp;arr1[__j] &amp;amp;order &amp;amp;arr1[__k] then continue;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = &amp;amp;arr1[__j];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr1[__j] = &amp;amp;arr1[__k];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr1[__k] = __t;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = &amp;amp;arr2[__j];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr2[__j] = &amp;amp;arr2[__k];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr2[__k] = __t;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __s = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;data want (keep=trial group:);&lt;/P&gt;&lt;P&gt;&amp;nbsp; array values(&amp;amp;n.);&lt;/P&gt;&lt;P&gt;&amp;nbsp; do until (eof);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set hej end=eof;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; values(i)=y;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array ordering(&amp;amp;n.);&lt;/P&gt;&lt;P&gt;&amp;nbsp; array group1_(%eval(&amp;amp;n./5));&lt;/P&gt;&lt;P&gt;&amp;nbsp; array group2_(%eval(&amp;amp;n./5));&lt;/P&gt;&lt;P&gt;&amp;nbsp; array group3_(%eval(&amp;amp;n./5));&lt;/P&gt;&lt;P&gt;&amp;nbsp; array group4_(%eval(&amp;amp;n./5));&lt;/P&gt;&lt;P&gt;&amp;nbsp; array group5_(%eval(&amp;amp;n./5));&lt;/P&gt;&lt;P&gt;&amp;nbsp; do trial=1 to 10000;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to &amp;amp;n.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ordering(i)=ranuni(0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %combsort(arr1=ordering, arr2=values);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; k=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to 5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1 to %eval(&amp;amp;n./5);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i eq 1 then group1_(j)=values(k);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if i eq 2 then group2_(j)=values(k);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if i eq 3 then group3_(j)=values(k);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if i eq 4 then group4_(j)=values(k);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if i eq 5 then group5_(j)=values(k);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 18:25:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107998#M22455</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-26T18:25:22Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107999#M22456</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;A very good point Art.&amp;nbsp; Depending on the analysis being done, it could be as simple as adding a grouping column (randomly or whatever suits) and then just including that as a classification variabale.&amp;nbsp; That way SAS will just split the results out by the groups anyway, and not have to bother with complex coding.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 18:53:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/107999#M22456</guid>
      <dc:creator>DF</dc:creator>
      <dc:date>2012-10-26T18:53:09Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108000#M22457</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You would gain in efficiency and simplicity by taking advantege of the BY statement available for almost every procedure in SAS. You could prepare your simulated group assignments like this :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;data simHEJ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;set SASUSER.HEJ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;do rep = 1 to 10000;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group = rand("UNIFORM");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;proc sort data=simHEJ; by rep; run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;proc rank data=simHEJ out=simHEJgrp groups=5;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;by rep;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;var group;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and perform your analysis on simHEJgrp,&lt;STRONG&gt;&lt;EM&gt; BY rep&lt;/EM&gt;&lt;/STRONG&gt;. Another advantage is that you could get all results in a single dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 19:35:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108000#M22457</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-10-26T19:35:21Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108001#M22458</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Why not just use PROC SURVEYSELECT?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 20:06:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108001#M22458</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-10-26T20:06:27Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108002#M22459</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The idea crossed my mind too but I wouldn't know how. I don't think SURVEYSELECT is meant for random assignment problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 23:54:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108002#M22459</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-10-26T23:54:47Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108003#M22460</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi PG,&lt;/P&gt;&lt;P&gt;How are you doing??&lt;/P&gt;&lt;P&gt;I ran your code with sashelp.class. Why only less than 16% with group=0?&amp;nbsp; I thought each group should have around 20%.&amp;nbsp; Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data simHEJ;&lt;/P&gt;&lt;P&gt;set sashelp.class;&lt;/P&gt;&lt;P&gt;do rep = 1 to 10000;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group = rand("UNIFORM");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=simHEJ; by rep; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc rank data=simHEJ out=simHEJgrp groups=5;&lt;/P&gt;&lt;P&gt;by rep;&lt;/P&gt;&lt;P&gt;var group;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc freq data=simHEJgrp ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; tables group/missing;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Oct 2012 00:17:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108003#M22460</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2012-10-27T00:17:07Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108004#M22461</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Linlin,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That's because there are only 19 observations in sashelp.class. They get divided into 5 groups of sizes 3,4,4,4,4. 3/19=0.158. With proc rank, the small group is always the same (group 0, in this case) but observations get assigned to that group randomly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Oct 2012 00:43:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108004#M22461</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-10-27T00:43:23Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108005#M22462</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Oct 2012 00:53:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108005#M22462</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2012-10-27T00:53:34Z</dc:date>
    </item>
    <item>
      <title>Re: Randomly assigning cases from a data set to different groups repeated times</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108006#M22463</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you everyone, your examples have been tremendously helpful. I stuck with your solution PGStats as the code was the simplest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/Sven&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 31 Oct 2012 20:47:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Randomly-assigning-cases-from-a-data-set-to-different-groups/m-p/108006#M22463</guid>
      <dc:creator>SvenCrona</dc:creator>
      <dc:date>2012-10-31T20:47:48Z</dc:date>
    </item>
  </channel>
</rss>

