<?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 randomly select at least one observation per subject in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355344#M83222</link>
    <description>&lt;P&gt;While you can probably get PROC SURVEYSELECT to do this, it's not super difficult to program yourself.&amp;nbsp; For example:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data temp;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;random_order = ranuni(12345);&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sort data=temp;&lt;/P&gt;
&lt;P&gt;by id random_order;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set temp;&lt;/P&gt;
&lt;P&gt;by id random_order;&lt;/P&gt;
&lt;P&gt;include = first.id;&lt;/P&gt;
&lt;P&gt;drop random_order;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can always re-sort the data if you would like at that point.&amp;nbsp; With 1,300 subjects, efficiency won't be a big issue.&lt;/P&gt;</description>
    <pubDate>Tue, 02 May 2017 18:15:34 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2017-05-02T18:15:34Z</dc:date>
    <item>
      <title>How to randomly select at least one observation per subject</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355337#M83220</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a dataset with about 1,300 subjects, many of which have multiple rows because they have multiple observation periods during my eight-year data collection / follow-up period.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/SPAN&gt; tempfile;&lt;/P&gt;&lt;P class="p2"&gt;infile&lt;SPAN class="s2"&gt; datalines &lt;/SPAN&gt;truncover&lt;SPAN class="s2"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2"&gt;INPUT&lt;/P&gt;&lt;P class="p1"&gt;StudyID&lt;SPAN class="s3"&gt;$2.&lt;/SPAN&gt;@+&lt;SPAN class="s3"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; count StartDate &lt;SPAN class="s3"&gt;mmddyy10.&lt;/SPAN&gt;@+&lt;SPAN class="s3"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; EndDate1 &lt;SPAN class="s3"&gt;mmddyy10.&lt;/SPAN&gt;@+&lt;SPAN class="s3"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p1"&gt;&lt;SPAN class="s5"&gt;format&lt;/SPAN&gt; Startdate EndDate1 &lt;SPAN class="s3"&gt;mmddyy10.&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p2"&gt;datalines&lt;SPAN class="s2"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;01 1 02/01/2007 05/01/2008&lt;/P&gt;&lt;P class="p1"&gt;02 1 06/02/2012 05/24/2013&lt;/P&gt;&lt;P class="p1"&gt;03 1 05/07/2010 08/19/2010&lt;/P&gt;&lt;P class="p1"&gt;04 1 06/16/2007 06/21/2008&lt;/P&gt;&lt;P class="p1"&gt;05 1 04/28/2007 11/07/2008&lt;/P&gt;&lt;P class="p1"&gt;06 1 03/16/2007 06/20/2007&lt;/P&gt;&lt;P class="p1"&gt;07 1 04/18/2007 04/19/2007&lt;/P&gt;&lt;P class="p1"&gt;08 1 05/11/2007 08/03/2007&lt;/P&gt;&lt;P class="p1"&gt;09 1 08/01/2007 08/28/2007&lt;/P&gt;&lt;P class="p1"&gt;09 3 02/21/2008 03/05/2008&lt;/P&gt;&lt;P class="p1"&gt;10 1 02/06/2008 03/12/2010&lt;/P&gt;&lt;P class="p1"&gt;11 1 01/31/2007 12/26/2008&lt;/P&gt;&lt;P class="p1"&gt;11 3 02/11/2009 05/08/2009&lt;/P&gt;&lt;P class="p1"&gt;11 5 05/19/2009 08/14/2009&lt;/P&gt;&lt;P class="p1"&gt;11 7 09/22/2009 12/18/2009&lt;/P&gt;&lt;P class="p1"&gt;11 9 01/09/2010 02/03/2010&lt;/P&gt;&lt;P class="p1"&gt;11 11 02/23/2010 11/19/2010&lt;/P&gt;&lt;P class="p1"&gt;11 13 12/01/2010 03/18/2011&lt;/P&gt;&lt;P class="p1"&gt;11 15 05/10/2011 04/23/2013&lt;/P&gt;&lt;P class="p1"&gt;11 17 08/03/2013 09/27/2013&lt;/P&gt;&lt;P class="p1"&gt;;&lt;/P&gt;&lt;P class="p4"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;SPAN class="s2"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s1"&gt;&lt;STRONG&gt;print&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s5"&gt;data&lt;/SPAN&gt;=tempfile; &lt;SPAN class="s1"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;Please note: The count variable is an old variable left over from a previous coding procedure.&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;For subjects with more than one observation, I will need to choose which observation to use as my "starting point". In an effort to avoid bias by only looking at everyone's first period or looking at everyone's last period that would allow for adequate follow-up time, I was thinking I could randomly select which observation period to use for analysis. This would mean that I need to include everyone who has&amp;nbsp;only one row and then, for subjects with more than one row, randomly selecting one of their rows to include for analysis. Is there a way to randomly assign ones and zeroes for example, in order to accomplish this? For example:&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;StudyID count StartDate EndDate1 &amp;nbsp; &amp;nbsp;INCLUDE&lt;/P&gt;&lt;P class="p1"&gt;01 1 02/01/2007 05/01/2008 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P class="p1"&gt;02 1 06/02/2012 05/24/2013&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;03 1 05/07/2010 08/19/2010&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;04 1 06/16/2007 06/21/2008&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;05 1 04/28/2007 11/07/2008&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;06 1 03/16/2007 06/20/2007&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;07 1 04/18/2007 04/19/2007&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;08 1 05/11/2007 08/03/2007&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;09 1 08/01/2007 08/28/2007&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;09 3 02/21/2008 03/05/2008&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;10 1 02/06/2008 03/12/2010&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 1 01/31/2007 12/26/2008&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 3 02/11/2009 05/08/2009&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 5 05/19/2009 08/14/2009&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 7 09/22/2009 12/18/2009&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 9 01/09/2010 02/03/2010&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 11 02/23/2010 11/19/2010&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 13 12/01/2010 03/18/2011&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 15 05/10/2011 04/23/2013&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;11 17 08/03/2013 09/27/2013&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;SPAN&gt;Thank you very much in advance!&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 02 May 2017 17:48:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355337#M83220</guid>
      <dc:creator>Kels123</dc:creator>
      <dc:date>2017-05-02T17:48:45Z</dc:date>
    </item>
    <item>
      <title>Re: How to randomly select at least one observation per subject</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355344#M83222</link>
      <description>&lt;P&gt;While you can probably get PROC SURVEYSELECT to do this, it's not super difficult to program yourself.&amp;nbsp; For example:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data temp;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;random_order = ranuni(12345);&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sort data=temp;&lt;/P&gt;
&lt;P&gt;by id random_order;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set temp;&lt;/P&gt;
&lt;P&gt;by id random_order;&lt;/P&gt;
&lt;P&gt;include = first.id;&lt;/P&gt;
&lt;P&gt;drop random_order;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can always re-sort the data if you would like at that point.&amp;nbsp; With 1,300 subjects, efficiency won't be a big issue.&lt;/P&gt;</description>
      <pubDate>Tue, 02 May 2017 18:15:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355344#M83222</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-05-02T18:15:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to randomly select at least one observation per subject</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355381#M83229</link>
      <description>&lt;P&gt;Let surveyselect do the job:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc surveyselect data=tempfile outall out=outfile sampsize=1;
strata studyId;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 02 May 2017 19:57:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355381#M83229</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2017-05-02T19:57:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to randomly select at least one observation per subject</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355382#M83230</link>
      <description>&lt;P&gt;Assuming the data are sorted by studyid, you can read and count the number of recs for each studyid, generating NRECS. Randomly choose an integer between 1 and NRECS ==&amp;gt;dummy_seq.&amp;nbsp; Then re-read and set dummy=1 for the selected sequence number:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want (drop=nrecs dummy_seq seq);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; do nrecs=1 by 1 until (last.studyid);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by studyid;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; dummy_seq =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ceil(nrecs*ranuni(09810987));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; do seq=1 to nrecs;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if seq=dummy_seq then dummy=1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else dummy=0;&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;</description>
      <pubDate>Tue, 02 May 2017 19:59:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-randomly-select-at-least-one-observation-per-subject/m-p/355382#M83230</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-05-02T19:59:31Z</dc:date>
    </item>
  </channel>
</rss>

