<?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 of cases and controls 1:3 in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837982#M331347</link>
    <description>Yes, i have a dataset with 5,600,000 controls and 400,000 cases, and I want to create a 1:3 matching in order to obtain a dataset (with 1,2 million observations) , where each row is made like this:&lt;BR /&gt;- id_control&lt;BR /&gt;- age_control&lt;BR /&gt;- sex_control&lt;BR /&gt;- id_case (the id of the case to which the control is matched)&lt;BR /&gt;- age_case&lt;BR /&gt;- sex_age&lt;BR /&gt;&lt;BR /&gt;Thank you for your help!</description>
    <pubDate>Wed, 12 Oct 2022 05:34:31 GMT</pubDate>
    <dc:creator>Simone98</dc:creator>
    <dc:date>2022-10-12T05:34:31Z</dc:date>
    <item>
      <title>Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837854#M331305</link>
      <description>&lt;P&gt;Good afternoon, I have a large dataset of 6 million observations (containing both cases and controls), made in this way:&lt;/P&gt;&lt;P&gt;- uniqueid : the unique code of each patient;&lt;/P&gt;&lt;P&gt;- gender&lt;/P&gt;&lt;P&gt;- age&lt;/P&gt;&lt;P&gt;- casecontrol (1 for cases, 0 for controls).&lt;/P&gt;&lt;P&gt;The cases are about 400,000 and i wanted to create a 1:3 matching with the controls, based on gender (same gender) and age (range of plus / minus 3 years).&lt;/P&gt;&lt;P&gt;At the end i want to obtain a dataset like this:&lt;/P&gt;&lt;P&gt;- id_control&lt;/P&gt;&lt;P&gt;- gender_control&lt;/P&gt;&lt;P&gt;- age_control&lt;/P&gt;&lt;P&gt;- id_case&lt;/P&gt;&lt;P&gt;- gender_case&lt;/P&gt;&lt;P&gt;- age_case&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I found a macro online, but no way to obtain the id_case... if someone can provide me a solution, it will be extremely helpful.&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 11 Oct 2022 13:43:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837854#M331305</guid>
      <dc:creator>Simone98</dc:creator>
      <dc:date>2022-10-11T13:43:10Z</dc:date>
    </item>
    <item>
      <title>Re: Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837945#M331328</link>
      <description>Not sure what you are really trying to accomplish.   &lt;BR /&gt;&lt;BR /&gt;Do you have 400,000 cases and 5,600,000 controls?&lt;BR /&gt;&lt;BR /&gt;Are you wanting to create a dataset of about 1.6 million observations in which 25 percent of the records (400,000) are cases and 75 percent of the records (1.2 million) are controls selected to match the cases?&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Tue, 11 Oct 2022 21:07:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837945#M331328</guid>
      <dc:creator>HB</dc:creator>
      <dc:date>2022-10-11T21:07:20Z</dc:date>
    </item>
    <item>
      <title>Re: Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837948#M331330</link>
      <description>Have you looked at PROC PSMATCH?</description>
      <pubDate>Tue, 11 Oct 2022 21:17:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837948#M331330</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2022-10-11T21:17:03Z</dc:date>
    </item>
    <item>
      <title>Re: Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837982#M331347</link>
      <description>Yes, i have a dataset with 5,600,000 controls and 400,000 cases, and I want to create a 1:3 matching in order to obtain a dataset (with 1,2 million observations) , where each row is made like this:&lt;BR /&gt;- id_control&lt;BR /&gt;- age_control&lt;BR /&gt;- sex_control&lt;BR /&gt;- id_case (the id of the case to which the control is matched)&lt;BR /&gt;- age_case&lt;BR /&gt;- sex_age&lt;BR /&gt;&lt;BR /&gt;Thank you for your help!</description>
      <pubDate>Wed, 12 Oct 2022 05:34:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/837982#M331347</guid>
      <dc:creator>Simone98</dc:creator>
      <dc:date>2022-10-12T05:34:31Z</dc:date>
    </item>
    <item>
      <title>Re: Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/838279#M331424</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN&gt;1:3 matching with the controls, based on gender (same gender) and age (range of plus / minus 3 years).&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN&gt;So for each case record, there is a range of 7 ages that can be acceptable matches.&amp;nbsp; And vice-versa, each of those control matches can be matched to some case record having 7 possible ages (forgetting for the moment the matches near the upper and lower ages).&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The problem here is, (assuming you are doing matching without replacement) that there can be distributions of ages that would only satisfy random case-control matching some (perhaps most) of the time, but not all of the time.&amp;nbsp; That is, some random draws of "matching" control ages for a given case age, could leave an insufficient sample of "matching" control ages for some other case age.&amp;nbsp; &amp;nbsp;Yet some other random draws from the same data might satisfy your objective of 3 controls per case.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For instance, you can have&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Two case records with ages 21 (n=1) and 22 (n=1)&lt;/LI&gt;
&lt;LI&gt;Eight control records with ages&amp;nbsp; &amp;nbsp;18 (n=1), 19 (n=1), 20 (n=1), 23 (n=1), 24 (n=1), and 25 (n=1).&amp;nbsp; I.e. no 21's or 22's.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;You might randomly assign control records with ages 19, 20 and 23 for case age 21.&amp;nbsp; That would leave only two controls records (ages 24 and 25) as matchable against case age 22.&amp;nbsp; Yet there are a number of other random draws from this data that would provide 1:3 matches.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now perhaps your data is not so pathologically distributed as to make random draws of matches more than infinitesimally likely to generate incomplete case-control matches&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But it's possible.&amp;nbsp; If it happens, I guess you could rerun your random assignment with a different random-number seed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 12 Oct 2022 18:10:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/838279#M331424</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2022-10-12T18:10:39Z</dc:date>
    </item>
    <item>
      <title>Re: Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/964851#M375727</link>
      <description>&lt;P&gt;Hi There,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I recently came across the HASH object which made my like much easier. Following is the program using HASH object to match 1:10 cases with controls. We can not use PSMatch, it is completely different than the match we do directly by comparing variables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data controls;&lt;/P&gt;&lt;P&gt;set controls;&lt;/P&gt;&lt;P&gt;matchkey = catx('_', gender_control , age_control);&lt;/P&gt;&lt;P&gt;proc sort data = controls out=controls;&lt;/P&gt;&lt;P&gt;by matchkey;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data cases;&lt;/P&gt;&lt;P&gt;set cases;&lt;/P&gt;&lt;P&gt;matchkey = catx('_', gender_case , age_case);&lt;/P&gt;&lt;P&gt;proc sort data = cases out=cases;&lt;/P&gt;&lt;P&gt;by matchkey;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data matched_ctrls(keep=id_case gender_case age_case id_control gender_control age_control&amp;nbsp; );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Length id_control&amp;nbsp; $20&amp;nbsp;age_control 8 gender_control&amp;nbsp; $2&amp;nbsp; matchkey $20;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if _N_ = 1 then do;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash controls(dataset:"controls", multidata: "Y");&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; controls.defineKey("matchkey");&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; controls.defineData("id_control","age_control","gender_control", "matchkey");&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; controls.defineDone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash used_controls();&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used_controls.defineKey("id_control");&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used_controls.defineDone();&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;do until (last.matchkey);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set cases;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by matchkey;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; match_count = 0;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc = controls.find(key:matchkey);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;do while(rc = 0 and match_count &amp;lt; 3 );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if used_controls.check(key:id_control) ne 0 then do;&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;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; output;&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;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; match_count+1;&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;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; used_controls.add();&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc = controls.find_next();&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Apr 2025 17:39:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/964851#M375727</guid>
      <dc:creator>PRoul</dc:creator>
      <dc:date>2025-04-22T17:39:47Z</dc:date>
    </item>
    <item>
      <title>Re: Matching of cases and controls 1:3</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/965146#M375800</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/264391"&gt;@PRoul&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I see two issues with your solution:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You are not solving the problem as stated by the OP.&amp;nbsp; You are doing EXACT matches of AGE between case and control.&amp;nbsp; But the OP was requesting matches having case_age within a range of case_control.&amp;nbsp; Assuming the OP would be equally satisfied with a "close" match vs an "exact" match, this program may not fully satisfy the initial request.&amp;nbsp; Of course, the OP might prefer to exclude close matches.&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;More importantly, your solution is unlikely to generate anything like a random sample of matches (unlike PSMATCH).&amp;nbsp; In particular, records near the end of the control dataset will not have the same probability of being selected as records near the start, even though they have the same match values.&amp;nbsp; That is because.
&lt;OL&gt;
&lt;LI&gt;PROC SORT, by default, does not change the order of records having identical sort keys.&lt;/LI&gt;
&lt;LI&gt;hash objects using the multidata:'Y' option preserves the order of data items having the same key to match the order retrieved from the source dataset.&amp;nbsp; This means your technique of FIND method followed by a series of FINDNEXT methods will always result in the data items near the start of the of the dataset being the first ones considered.&amp;nbsp; This is true even though you are sampling without replacement.&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Now if your control dataset is in truly random order to begin with (i.e. before the proc sort), you would effectively have a random solution.&amp;nbsp; But with real datasets, it's pretty heroic to assume they are in random order.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could resolve this problem by randomizing the order of data within each match key as follows:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data controls;
  set controls;
  matchkey = catx('_', gender_control , age_control);
  call streaminit(0598666);
  rnum=rand('uniform');
run;
proc sort data = controls out=controls;
  by matchkey rnum;
run;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;followed by your data step with hash code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This would effectively mean that every observation with a given matchkey value would have the same probability of being selected.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BTW, for purposes of matching cases and controls, there is no need to sort the CASES file.&amp;nbsp; It's just wasted resources.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 26 Apr 2025 02:54:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Matching-of-cases-and-controls-1-3/m-p/965146#M375800</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2025-04-26T02:54:32Z</dc:date>
    </item>
  </channel>
</rss>

