<?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: Matching case-control in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667735#M200030</link>
    <description>&lt;P&gt;Dear Venkatamahesh,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;your code generates indeed the want table I gave in my original request. However, by sorting on control, you also delete records which are still valid. For example if you use:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;1 1&lt;BR /&gt;1 2&lt;BR /&gt;1 3&lt;BR /&gt;1 4&lt;BR /&gt;1 5&lt;BR /&gt;1 6&lt;BR /&gt;2 2&lt;BR /&gt;2 4&lt;BR /&gt;2 8&lt;BR /&gt;2 10&lt;BR /&gt;2 12&lt;BR /&gt;2 14&lt;BR /&gt;3 1&lt;BR /&gt;3 4&lt;BR /&gt;3 9&lt;BR /&gt;3 11&lt;BR /&gt;3 13&lt;BR /&gt;3 14&lt;BR /&gt;3 16&lt;BR /&gt;3 20&lt;BR /&gt;3 22&lt;BR /&gt;4 1&lt;BR /&gt;4 2&lt;BR /&gt;4 3&lt;BR /&gt;4 4&lt;BR /&gt;4 5&lt;BR /&gt;4 6&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The fourth case is completely deleted, but case 4 should be matched to control 5 and 6.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 08 Jul 2020 14:58:10 GMT</pubDate>
    <dc:creator>lvb1</dc:creator>
    <dc:date>2020-07-08T14:58:10Z</dc:date>
    <item>
      <title>Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667695#M200003</link>
      <description>&lt;P&gt;I have a dataset with potential case-control pairs. I would like to select for every case four controls, without replacement.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Have:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;case&lt;/TD&gt;&lt;TD&gt;control&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;SPAN style="font-family: inherit;"&gt;&lt;BR /&gt;Want:&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;case&lt;/TD&gt;&lt;TD&gt;control&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Wed, 08 Jul 2020 13:04:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667695#M200003</guid>
      <dc:creator>lvb1</dc:creator>
      <dc:date>2020-07-08T13:04:54Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667698#M200006</link>
      <description>Have you tried proc surveyselect?&lt;BR /&gt;&lt;A href="https://documentation.sas.com/?docsetId=statug&amp;amp;docsetTarget=statug_surveyselect_toc.htm&amp;amp;docsetVersion=15.1&amp;amp;locale=en" target="_blank"&gt;https://documentation.sas.com/?docsetId=statug&amp;amp;docsetTarget=statug_surveyselect_toc.htm&amp;amp;docsetVersion=15.1&amp;amp;locale=en&lt;/A&gt;</description>
      <pubDate>Wed, 08 Jul 2020 13:16:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667698#M200006</guid>
      <dc:creator>smantha</dc:creator>
      <dc:date>2020-07-08T13:16:53Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667701#M200009</link>
      <description>&lt;P&gt;Yes, Smantha, I did:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc surveyselect data=cc out=RandOrderCC noprint&lt;BR /&gt;method=SRS /* sample w/o replacement seed=123 */&lt;BR /&gt;samprate=1 /* proportion of observations in sample */&lt;BR /&gt;OUTRANDOM;&amp;nbsp;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;That didn't give four controls for every case. I should have N cases * 4 controls. Depending on the seed, I get a different number of controls.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(Also: if I have for case 1 controls 1 2 3 4 and for case 2 I also have control 2, I would like to avoid that the selection procedure uses control 2 for case 2, since I only have 4 controls for case 1. I would like to have as many controls as possible.)&lt;/P&gt;</description>
      <pubDate>Wed, 08 Jul 2020 13:29:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667701#M200009</guid>
      <dc:creator>lvb1</dc:creator>
      <dc:date>2020-07-08T13:29:29Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667708#M200014</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data given;
input case control;
datalines;
1 1
1 2
1 3
1 4
1 5
1 6
2 2
2 4
2 8
2 10
2 12
2 14
3 1
3 4
3 9
3 11
3 13
3 14
3 16
3 20
3 22
;
run;

proc sort nodupkey;
by control;
run;

proc sort;
by case control;
run;

%macro function(dsn,value);
data &amp;amp;dsn;
set given;
if case = &amp;amp;value then output &amp;amp;dsn;
run;

data &amp;amp;dsn;
set &amp;amp;dsn;
if _n_ &amp;lt; 5 then output;
run;
%mend function;

%function(one,1);
%function(two,2);
%function(three,3);

data final;
set one two three;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 08 Jul 2020 13:38:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667708#M200014</guid>
      <dc:creator>VENKATAMAHESH</dc:creator>
      <dc:date>2020-07-08T13:38:44Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667735#M200030</link>
      <description>&lt;P&gt;Dear Venkatamahesh,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;your code generates indeed the want table I gave in my original request. However, by sorting on control, you also delete records which are still valid. For example if you use:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;1 1&lt;BR /&gt;1 2&lt;BR /&gt;1 3&lt;BR /&gt;1 4&lt;BR /&gt;1 5&lt;BR /&gt;1 6&lt;BR /&gt;2 2&lt;BR /&gt;2 4&lt;BR /&gt;2 8&lt;BR /&gt;2 10&lt;BR /&gt;2 12&lt;BR /&gt;2 14&lt;BR /&gt;3 1&lt;BR /&gt;3 4&lt;BR /&gt;3 9&lt;BR /&gt;3 11&lt;BR /&gt;3 13&lt;BR /&gt;3 14&lt;BR /&gt;3 16&lt;BR /&gt;3 20&lt;BR /&gt;3 22&lt;BR /&gt;4 1&lt;BR /&gt;4 2&lt;BR /&gt;4 3&lt;BR /&gt;4 4&lt;BR /&gt;4 5&lt;BR /&gt;4 6&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The fourth case is completely deleted, but case 4 should be matched to control 5 and 6.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 08 Jul 2020 14:58:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667735#M200030</guid>
      <dc:creator>lvb1</dc:creator>
      <dc:date>2020-07-08T14:58:10Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667872#M200088</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data cc;
input case control;
datalines;
1 1
1 2
1 3
1 4
1 5
1 6
2 2
2 4
2 8
2 10
2 12
2 14
3 1
3 4
3 9
3 11
3 13
3 14
3 16
3 20
3 22
4 1
4 2
4 3
4 4
4 5
4 6
;
run;

proc sort; by case control; 
run;

data _null_;
set cc nobs=n;
call symputx('nrow',n);
stop;
run;
options symbolgen;
data want;
set cc ;
array test{&amp;amp;nrow.};
retain test1-test&amp;amp;nrow. count;
by case;
if first.case then count=1;

if count &amp;lt;5 then do;
 put _all_;
 if control not in test then do;
   count=count+1;
   output;
   test[_n_]= control;
 end;
end;


drop test1-test&amp;amp;nrow. count;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 08 Jul 2020 20:49:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667872#M200088</guid>
      <dc:creator>smantha</dc:creator>
      <dc:date>2020-07-08T20:49:01Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667980#M200142</link>
      <description>&lt;P&gt;You can do it in a single datastep, quite simple:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input case control;
datalines;
1 1
1 2
1 3
1 4
1 5
1 6
2 2
2 4
2 8
2 10
2 12
2 14
3 1
3 4
3 9
3 11
3 13
3 14
3 16
3 20
3 22
;
run;

data want;
  do _N_=1 by 1 until(last.case);
    set have;
    by case;
    end;
  out=4;
  do _N_=_N_ to 1 by -1;
    set have;
    if rand('uniform')&amp;lt;out/_N_ then do;
      output;
      out=out-1;
      end;
    end;
  drop out;  /* Yes, that's a valid SAS statement... */
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 09 Jul 2020 08:07:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/667980#M200142</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2020-07-09T08:07:48Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/668634#M200455</link>
      <description>&lt;P&gt;Sorry, that didn't work. As said, once I have four cases, the code doesn't generate the correct output.&lt;/P&gt;</description>
      <pubDate>Sun, 12 Jul 2020 09:45:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/668634#M200455</guid>
      <dc:creator>lvb1</dc:creator>
      <dc:date>2020-07-12T09:45:16Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/668635#M200456</link>
      <description>&lt;P&gt;Hi Smanta, the codes works for a small set of data, but I have 400.000 potential case control matches. The code ran for three days and the computer blocked. The log file was about 177GB. I will need something else I'm afraid.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 12 Jul 2020 09:47:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/668635#M200456</guid>
      <dc:creator>lvb1</dc:creator>
      <dc:date>2020-07-12T09:47:45Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/668747#M200515</link>
      <description>&lt;P&gt;Sorry, I misunderstood your requirements. I thought you needed a random selection of cases, but it seems it does not have to be. On the other hand you need CONTROL to be unique. Is that correct?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If I have understood that correctly, here is a way that may work:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  stop;
run;

proc sql;
  create unique index control on want(control);
quit;

data want;
  if 0 then modify want;
  out=4;
  do until(last.case);
    set have;
    by case;
    if out=0 then continue;
    _iorc_=0;
    output;
    if _iorc_ then continue; /* unique key restraint violated */
    out=out-1;
    end;
  _error_=0;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 13 Jul 2020 06:51:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/668747#M200515</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2020-07-13T06:51:06Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/669154#M200697</link>
      <description>&lt;P&gt;This works, thanks.&lt;/P&gt;</description>
      <pubDate>Tue, 14 Jul 2020 13:24:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/669154#M200697</guid>
      <dc:creator>lvb1</dc:creator>
      <dc:date>2020-07-14T13:24:59Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/669178#M200704</link>
      <description>&lt;P&gt;Great to hear - please mark it as a solution, then&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:"&gt;😊&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 14 Jul 2020 14:47:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/669178#M200704</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2020-07-14T14:47:54Z</dc:date>
    </item>
    <item>
      <title>Re: Matching case-control</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/801725#M315540</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the same problem and when I run the first step of your code -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;set have;&lt;/P&gt;&lt;P&gt;stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I don;t under stand this step as it just reduces my data to zero records?&lt;/P&gt;</description>
      <pubDate>Fri, 11 Mar 2022 18:50:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-case-control/m-p/801725#M315540</guid>
      <dc:creator>kjmathes03</dc:creator>
      <dc:date>2022-03-11T18:50:53Z</dc:date>
    </item>
  </channel>
</rss>

