<?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 assigning random binary variables to data set in a predetermined mixture in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60101#M17032</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Don't need to create a separate dataset and merge, one data step is enough.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For really simple 0/1 proportions this works well:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x4 = ( uniform( 12345 ) &amp;gt;= 0.5&amp;nbsp;&amp;nbsp; );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 50/50 of 0 and 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x4 = ( uniform( 12345 ) &amp;gt;= 0.75 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 75/25 of 0 and 1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For more complicated value distributions, use data_null_'s method:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call streaminit( 12345 );&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * only the very first call matters;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x4 = rand( 'TABLE', 0.25, 0.75 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 25% 1,&amp;nbsp; 75% 2;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 01 Sep 2011 20:40:50 GMT</pubDate>
    <dc:creator>DLing</dc:creator>
    <dc:date>2011-09-01T20:40:50Z</dc:date>
    <item>
      <title>assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60098#M17029</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hello all-&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;suppose i have a data set with 3 variables and i want to make up a 4th variable that is assigned a random binary number (0/1) with a predertermined percentage of ones and zeros. for example if i wanted a 50/50 mix of 0/1:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;x1 x2 x3 x4&lt;/P&gt;&lt;P&gt;a a a 0&lt;/P&gt;&lt;P&gt;a a a 0&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;a a a 0&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;or if i wanted a 25/75 mix (here i just round up the 1.5 zeros):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;x1 x2 x3 x4&lt;/P&gt;&lt;P&gt;a a a 0&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;a a a 0&lt;/P&gt;&lt;P&gt;a a a 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;is there any possible way to do this? one way i can think of is to create a dataset with the 0/1 and just merge two data sets:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data new; set old; set zero_ones; run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Sep 2011 20:13:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60098#M17029</guid>
      <dc:creator>trekvana</dc:creator>
      <dc:date>2011-09-01T20:13:50Z</dc:date>
    </item>
    <item>
      <title>assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60099#M17030</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think you want the tabled distribution.&amp;nbsp; See documentation for details.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;x = &lt;SPAN class="strong"&gt;RAND&lt;/SPAN&gt;('TABLE',&lt;SPAN class="emph"&gt;p1&lt;/SPAN&gt;,&lt;SPAN class="emph"&gt;p2&lt;/SPAN&gt;, ...) &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Sep 2011 20:17:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60099#M17030</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2011-09-01T20:17:35Z</dc:date>
    </item>
    <item>
      <title>assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60100#M17031</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You could use a modulo operation.&amp;nbsp; It isn't 'random' but would assign a give a evenly distributed binary set.&amp;nbsp; It is repeatable and distributable across the sort of the set...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;x4=mod(_n_,2) /* outputs values of 0 or 1 based on record number */&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Sep 2011 20:34:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60100#M17031</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-09-01T20:34:22Z</dc:date>
    </item>
    <item>
      <title>assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60101#M17032</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Don't need to create a separate dataset and merge, one data step is enough.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For really simple 0/1 proportions this works well:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x4 = ( uniform( 12345 ) &amp;gt;= 0.5&amp;nbsp;&amp;nbsp; );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 50/50 of 0 and 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x4 = ( uniform( 12345 ) &amp;gt;= 0.75 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 75/25 of 0 and 1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For more complicated value distributions, use data_null_'s method:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call streaminit( 12345 );&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * only the very first call matters;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x4 = rand( 'TABLE', 0.25, 0.75 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 25% 1,&amp;nbsp; 75% 2;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Sep 2011 20:40:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60101#M17032</guid>
      <dc:creator>DLing</dc:creator>
      <dc:date>2011-09-01T20:40:50Z</dc:date>
    </item>
    <item>
      <title>Re: assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60102#M17033</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;thanks everyone for the suggestions. one thing i noticed: since the rand(table) and ranuni functions are really random, im not always guaranteed that predetermined mixture everytime I run the code. I just realized that after posting this topic. I came up with this code to get me close to the predetermined mixture (if a perfect separation is not possible I just round the numbers). what do you guys think? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;is there a more efficient way to write the do loop - perhaps combining both do loops to say from i=1 to round(&amp;amp;n*&amp;amp;p0) do blah then from i=round(&amp;amp;n*&amp;amp;p0) +1 to round(&amp;amp;n*(1-&amp;amp;p0) do blah&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro zeroones(n=,p0=,seed=);&lt;/P&gt;&lt;P&gt;data zeroones;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to round(&amp;amp;n*&amp;amp;p0); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=0; y=ranuni(&amp;amp;seed); output; &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; do i=1 to round(&amp;amp;n*(1-&amp;amp;p0));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=1; y=ranuni(&amp;amp;seed); output;&lt;/P&gt;&lt;P&gt;&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=zeroones out=zeroones(drop=i y); by y; run;&lt;/P&gt;&lt;P&gt;%mend zeroones;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%zeroones(n=20,p0=.36,seed=12489);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc freq data=zeroones; tables x; run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Sep 2011 21:00:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60102#M17033</guid>
      <dc:creator>trekvana</dc:creator>
      <dc:date>2011-09-01T21:00:22Z</dc:date>
    </item>
    <item>
      <title>assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60103#M17034</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;%zeroones(want= ,have=0 ,flag= );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if &amp;amp;have&amp;gt;0 then do;&lt;/P&gt;&lt;P&gt; array accum&amp;amp;sysindex(1) _temporary_ (0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; accum&amp;amp;sysindex(1) + &amp;amp;want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if accum&amp;amp;sysindex(1) &amp;gt;= &amp;amp;have then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; accum&amp;amp;sysindex(1) = accum&amp;amp;sysindex(1) - &amp;amp;have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;flag=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else &amp;amp;flag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt; do i=1 to 100;&lt;/P&gt;&lt;P&gt;%zeroones(want=25,have=100,flag=x4);&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Sep 2011 21:34:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60103#M17034</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-09-01T21:34:16Z</dc:date>
    </item>
    <item>
      <title>Re: assigning random binary variables to data set in a predetermined mixture</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60104#M17035</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The methods listed above will not give you &lt;STRONG&gt;exactly &lt;/STRONG&gt;that binary proportion, but very close to it.&lt;/P&gt;&lt;P&gt;This is what I use to get almost exactly the desired proportion for 0/1.&amp;nbsp; The idea is to track the actual proportion generated so far and to "wiggle" the probability to compensate.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;%let&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; prob1 = 0.2345;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;%let&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; size&amp;nbsp; = 100000;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; want;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _n_ = &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;then&lt;/SPAN&gt; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;retain&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _need1 _remain;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _need1 = &amp;amp;prob1 * &amp;amp;size;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;*&amp;nbsp; number of 1 needed, replace with a number if you like;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _remain = &amp;amp;size;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;*&amp;nbsp; remaining number of records;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _i = &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &amp;amp;size;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;x4 = ( ranuni( &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;12345&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; ) &amp;lt;= ( _need1 / _remain ) );&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;output&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; x4 &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _need1 = _need1 - &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;* if is 1, need 1 less 1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;_remain = _remain - &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt;;&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; &lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;* have 1 less record left;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _remain _need1 _i;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;run&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;means&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;run&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This generates exactly the desired proportion, almost without fail.&amp;nbsp; If you have an input dataset, try some variation of this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;%let&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; prob1 = 0.2345;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; want;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; have nobs=_tot;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _n_ = &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;then&lt;/SPAN&gt; &lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;retain&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _need1 _remain;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;need1 = &amp;amp;prob1 * _tot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;*&amp;nbsp; number of 1 records needed, replace with a number if you like;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;_remain = _tot;&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; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;*&amp;nbsp; remaining number of records;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;x4 = ( ranuni( &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;12345&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; ) &amp;lt;= ( _need1 / _remain ) );&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; x4 &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _need1 = _need1 - &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;* if is 1, need 1 less 1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;_remain = _remain - &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;1&lt;/STRONG&gt;;&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; &lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;* have 1 less record left;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: green; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: blue; font-size: 9pt;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt; _remain _need1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; font-size: 9pt; background-color: white; font-family: Consolas;"&gt;run&lt;/STRONG&gt;&lt;SPAN style="background-color: white; font-family: Consolas; color: black; font-size: 9pt;"&gt;; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Often this idea is used in sampling as well to get exactly the desired proportion.&amp;nbsp; A bit of work can extend it to stratified sampling.&amp;nbsp; Just have to keep more counters and adjust appropriately.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 02 Sep 2011 13:52:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/assigning-random-binary-variables-to-data-set-in-a-predetermined/m-p/60104#M17035</guid>
      <dc:creator>DLing</dc:creator>
      <dc:date>2011-09-02T13:52:40Z</dc:date>
    </item>
  </channel>
</rss>

