<?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 Proc sql conditional date values merge in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-conditional-date-values-merge/m-p/949487#M371409</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two dataset and need to be assign value based on date ranges .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;subject&lt;/TD&gt;&lt;TD&gt;Siteid&lt;/TD&gt;&lt;TD&gt;Test&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;12-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;22-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;31-Sep-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;12-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;12-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;25-Jun-24&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below Value need to add above dataset where same siteid and test and the date value between stdt and endt.&lt;/P&gt;&lt;P&gt;if endt is missing then use only date and stdt&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;for example subject 1001 and siteid = 201 ,test = LDH , date = 31Sep24 , value need be assign 27 and rest of two records will get value 24 .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;siteid&lt;/TD&gt;&lt;TD&gt;test&lt;/TD&gt;&lt;TD&gt;stdt&lt;/TD&gt;&lt;TD&gt;endt&lt;/TD&gt;&lt;TD&gt;value&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;10-Aug-24&lt;/TD&gt;&lt;TD&gt;15-Aug-24&lt;/TD&gt;&lt;TD&gt;24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;30-Sep-24&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;27&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;10-Aug-24&lt;/TD&gt;&lt;TD&gt;15-Aug-24&lt;/TD&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;15-Mar-24&lt;/TD&gt;&lt;TD&gt;28-Mar-24&lt;/TD&gt;&lt;TD&gt;35&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;15-Mar-24&lt;/TD&gt;&lt;TD&gt;28-Mar-24&lt;/TD&gt;&lt;TD&gt;1021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;20-Jun-24&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1031&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
    <pubDate>Wed, 30 Oct 2024 15:26:22 GMT</pubDate>
    <dc:creator>raja777pharma</dc:creator>
    <dc:date>2024-10-30T15:26:22Z</dc:date>
    <item>
      <title>Proc sql conditional date values merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-conditional-date-values-merge/m-p/949487#M371409</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two dataset and need to be assign value based on date ranges .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;subject&lt;/TD&gt;&lt;TD&gt;Siteid&lt;/TD&gt;&lt;TD&gt;Test&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;12-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;22-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;31-Sep-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;12-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;12-Aug-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;18-Mar-24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;25-Jun-24&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below Value need to add above dataset where same siteid and test and the date value between stdt and endt.&lt;/P&gt;&lt;P&gt;if endt is missing then use only date and stdt&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;for example subject 1001 and siteid = 201 ,test = LDH , date = 31Sep24 , value need be assign 27 and rest of two records will get value 24 .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;siteid&lt;/TD&gt;&lt;TD&gt;test&lt;/TD&gt;&lt;TD&gt;stdt&lt;/TD&gt;&lt;TD&gt;endt&lt;/TD&gt;&lt;TD&gt;value&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;10-Aug-24&lt;/TD&gt;&lt;TD&gt;15-Aug-24&lt;/TD&gt;&lt;TD&gt;24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;30-Sep-24&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;27&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;201&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;10-Aug-24&lt;/TD&gt;&lt;TD&gt;15-Aug-24&lt;/TD&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;LDH&lt;/TD&gt;&lt;TD&gt;15-Mar-24&lt;/TD&gt;&lt;TD&gt;28-Mar-24&lt;/TD&gt;&lt;TD&gt;35&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;15-Mar-24&lt;/TD&gt;&lt;TD&gt;28-Mar-24&lt;/TD&gt;&lt;TD&gt;1021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;202&lt;/TD&gt;&lt;TD&gt;ALT&lt;/TD&gt;&lt;TD&gt;20-Jun-24&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1031&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Wed, 30 Oct 2024 15:26:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-sql-conditional-date-values-merge/m-p/949487#M371409</guid>
      <dc:creator>raja777pharma</dc:creator>
      <dc:date>2024-10-30T15:26:22Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sql conditional date values merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-conditional-date-values-merge/m-p/949489#M371410</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Kindly Note that September has dates upto 30th*/
data dataset1;
    input subject Siteid Test $ date :date9.;
    format date date9.;
    datalines;
1001 201 LDH 12-Aug-24
1001 201 LDH 22-Aug-24
1001 201 LDH 31-Sep-24
1001 201 ALT 12-Aug-24
1001 201 ALT 12-Aug-24
1002 202 LDH 18-Mar-24
1002 202 LDH 18-Mar-24
1002 202 ALT 18-Mar-24
1002 202 ALT 18-Mar-24
1002 202 ALT 25-Jun-24
;
run;

data dataset2;
    input Siteid Test $ stdt :date9. endt :date9. value;
    format stdt endt date9.;
    datalines;
201 LDH 10-Aug-24 15-Aug-24 24
201 LDH 30-Sep-24 . 27
201 ALT 10-Aug-24 15-Aug-24 1002
202 LDH 15-Mar-24 28-Mar-24 35
202 ALT 15-Mar-24 28-Mar-24 1021
202 ALT 20-Jun-24 . 1031
;
run;

proc sql;
    create table merged as
    select a.*, b.value
    from dataset1 as a
    left join dataset2 as b
    on a.Siteid = b.Siteid and a.Test = b.Test
    and (a.date between b.stdt and coalesce(b.endt, a.date));
quit;

proc print data=merged;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The date “31-Sep-24” is missing because September only has 30 days. Therefore, “31-Sep-24” is not a valid date.&lt;/P&gt;
&lt;P&gt;To correct this, you should use a valid date within September, such as “30-Sep-24”. Here’s the updated dataset with the corrected date:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data dataset1;
    input subject Siteid Test $ date :date9.;
    format date date9.;
    datalines;
1001 201 LDH 12-Aug-24
1001 201 LDH 22-Aug-24
1001 201 LDH 30-Sep-24
1001 201 ALT 12-Aug-24
1001 201 ALT 12-Aug-24
1002 202 LDH 18-Mar-24
1002 202 LDH 18-Mar-24
1002 202 ALT 18-Mar-24
1002 202 ALT 18-Mar-24
1002 202 ALT 25-Jun-24
;
run;

data dataset2;
    input Siteid Test $ stdt :date9. endt :date9. value;
    format stdt endt date9.;
    datalines;
201 LDH 10-Aug-24 15-Aug-24 24
201 LDH 30-Sep-24 . 27
201 ALT 10-Aug-24 15-Aug-24 1002
202 LDH 15-Mar-24 28-Mar-24 35
202 ALT 15-Mar-24 28-Mar-24 1021
202 ALT 20-Jun-24 . 1031
;
run;

proc sql;
    create table merged as
    select a.*, b.value
    from dataset1 as a
    left join dataset2 as b
    on a.Siteid = b.Siteid and a.Test = b.Test
    and (a.date between b.stdt and coalesce(b.endt, a.date));
quit;

proc print data=merged;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 30 Oct 2024 16:09:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-sql-conditional-date-values-merge/m-p/949489#M371410</guid>
      <dc:creator>himself</dc:creator>
      <dc:date>2024-10-30T16:09:54Z</dc:date>
    </item>
  </channel>
</rss>

