<?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: Assign an object to a place based on probability in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842156#M333001</link>
    <description>&lt;P&gt;Thank you guys. all solutions seem to work fine!&lt;/P&gt;</description>
    <pubDate>Wed, 02 Nov 2022 17:24:26 GMT</pubDate>
    <dc:creator>ciro</dc:creator>
    <dc:date>2022-11-02T17:24:26Z</dc:date>
    <item>
      <title>Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841326#M332657</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am not sure whether this is right forum to ask this question.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a dataset like the following:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data have;&lt;BR /&gt;object=1; place='A'; prob=0.6;output;&lt;BR /&gt;object=1; place='B'; prob=0.3;output;&lt;BR /&gt;object=1; place='C'; prob=0.1;output;&lt;BR /&gt;object=2; place='A'; prob=0.2;output;&lt;BR /&gt;object=2; place='D'; prob=0.4;output;&lt;BR /&gt;object=2; place='E'; prob=0.3;output;&lt;BR /&gt;object=2; place='F'; prob=0.1;output;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;that is object 1 is in place A with probability 0.6, in place B with probability 0.3, in place C with probability 0.1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want to assign randomly each subject in only one place based on the probability. that is the output dataset should be like this.&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data want;&lt;BR /&gt;object=1; place='A'; prob=0.6; in=1;output;&lt;BR /&gt;object=1; place='B'; prob=0.3; in=0;output;&lt;BR /&gt;object=1; place='C'; prob=0.1; in=0;output;&lt;BR /&gt;object=2; place='A'; prob=0.2; in=0;output;&lt;BR /&gt;object=2; place='D'; prob=0.4; in=0;output;&lt;BR /&gt;object=2; place='E'; prob=0.3; in=1;output;&lt;BR /&gt;object=2; place='F'; prob=0.1; in=0;output;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;in this example object 1 was assigned to place A and object 2 to place E. the assignation should be random.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;the real dataset is quite big, each object has possibly a long list of places, and the list of places is different for each object.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Any advice is much appreciated and, if possible, I would also like to compare different kind of solutions: data steps, iml, OR(?)...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you very much in advance&lt;/P&gt;</description>
      <pubDate>Fri, 28 Oct 2022 15:50:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841326#M332657</guid>
      <dc:creator>ciro</dc:creator>
      <dc:date>2022-10-28T15:50:58Z</dc:date>
    </item>
    <item>
      <title>Re: Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841330#M332661</link>
      <description>&lt;P&gt;This seems like a job for the RAND function with tabled distribution.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://documentation.sas.com/doc/en/pgmmvacdc/9.4/lefunctionsref/p0fpeei0opypg8n1b06qe4r040lv.htm#p0rssof65ddoyyn1s3kfdap849lr" target="_blank" rel="noopener"&gt;https://documentation.sas.com/doc/en/pgmmvacdc/9.4/lefunctionsref/p0fpeei0opypg8n1b06qe4r040lv.htm#p0rssof65ddoyyn1s3kfdap849lr&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
object=1; place='A'; prob=0.6;output;
object=1; place='B'; prob=0.3;output;
object=1; place='C'; prob=0.1;output;
object=2; place='A'; prob=0.2;output;
object=2; place='D'; prob=0.4;output;
object=2; place='E'; prob=0.3;output;
object=2; place='F'; prob=0.1;output;
run;
proc transpose data=have out=have_t;
    by object;
    var prob;
run;
data want;
    merge have have_t;
    retain z;
    by object;
    if first.object then do; 
        seq=0;
        z=rand('tabled',of col:);
    end;
    seq+1;
    if seq=z then in=1;
    else in=0;
    keep object place prob in;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 28 Oct 2022 16:24:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841330#M332661</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2022-10-28T16:24:20Z</dc:date>
    </item>
    <item>
      <title>Re: Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841389#M332693</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/114"&gt;@ciro&lt;/a&gt;,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/114"&gt;@ciro&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;(...) if possible, I would also like to compare different kind of solutions: data steps, iml, OR(?)...&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I don't have a SAS/IML or SAS/OR license, so here's another data step solution:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(drop=_:);
call streaminit(27182818);
do until(last.object);
  set have;
  by object;
  if ~_a then do;  /* i.e., if the object has not been assigned yet */
    in=rand('bern',fuzz(prob/(1-coalesce(_cp,0))));
    _cp=sum(_cp,prob); /* "cumulative probability" */
    _a=in;
  end;
  else in=0;
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The FUZZ function serves as a safety measure against rounding errors (up to 1E-12) -- assuming that there are no cases with &lt;FONT face="courier new,courier"&gt;0&amp;lt;prob&amp;lt;=1E-12&lt;/FONT&gt;.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Oct 2022 21:33:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841389#M332693</guid>
      <dc:creator>FreelanceReinh</dc:creator>
      <dc:date>2022-10-28T21:33:03Z</dc:date>
    </item>
    <item>
      <title>Re: Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841437#M332719</link>
      <description>&lt;P&gt;"the assignation should be random."&lt;/P&gt;
&lt;P&gt;It is randomly according to variable 'prob' , or just equal probability random ?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
object=1; place='A'; prob=0.6;output;
object=1; place='B'; prob=0.3;output;
object=1; place='C'; prob=0.1;output;
object=2; place='A'; prob=0.2;output;
object=2; place='D'; prob=0.4;output;
object=2; place='E'; prob=0.3;output;
object=2; place='F'; prob=0.1;output;
run;
proc surveyselect data=have sampsize=1 seed=123 outrandom out=temp;
strata object;
run;
data want;
 merge have temp(keep=object place in=inb);
 by object  place;
 in=inb;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 29 Oct 2022 10:26:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/841437#M332719</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-10-29T10:26:34Z</dc:date>
    </item>
    <item>
      <title>Re: Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842048#M332948</link>
      <description>thanks Ksharp. It should be random according to variable prob.</description>
      <pubDate>Wed, 02 Nov 2022 09:57:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842048#M332948</guid>
      <dc:creator>ciro</dc:creator>
      <dc:date>2022-11-02T09:57:28Z</dc:date>
    </item>
    <item>
      <title>Re: Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842059#M332954</link>
      <description>&lt;P&gt;OK. How about this one ?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
object=1; place='A'; prob=0.6;output;
object=1; place='B'; prob=0.3;output;
object=1; place='C'; prob=0.1;output;
object=2; place='A'; prob=0.2;output;
object=2; place='D'; prob=0.4;output;
object=2; place='E'; prob=0.3;output;
object=2; place='F'; prob=0.1;output;
run;
proc surveyselect data=have sampsize=1 seed=123 method=pps out=temp;
strata object;
size prob;
run;
data want;
 merge have temp(keep=object place in=inb);
 by object  place;
 in=inb;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 02 Nov 2022 11:45:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842059#M332954</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-11-02T11:45:35Z</dc:date>
    </item>
    <item>
      <title>Re: Assign an object to a place based on probability</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842156#M333001</link>
      <description>&lt;P&gt;Thank you guys. all solutions seem to work fine!&lt;/P&gt;</description>
      <pubDate>Wed, 02 Nov 2022 17:24:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Assign-an-object-to-a-place-based-on-probability/m-p/842156#M333001</guid>
      <dc:creator>ciro</dc:creator>
      <dc:date>2022-11-02T17:24:26Z</dc:date>
    </item>
  </channel>
</rss>

