<?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: data step to merge for a date range in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191063#M266107</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for telling me the caveat for the data step!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 27 Jul 2014 00:07:37 GMT</pubDate>
    <dc:creator>caveman529</dc:creator>
    <dc:date>2014-07-27T00:07:37Z</dc:date>
    <item>
      <title>data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191050#M266094</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear All:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you tell me what is the DATA STEP equivalent for the following SQL statement?&amp;nbsp; When I run the following code, SAS runs extremely slow on a high-end workstation.&amp;nbsp; So I think the sort sort merge approach may help in this situation.&amp;nbsp; Thank you ~&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;sql&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;create&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;table&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; want &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;select&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: teal; background: white;"&gt;a.&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;*, coalesce(a.condition, b.condition) &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; condition&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;from&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have1 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;left&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;join&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have2 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; b&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;on&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.patient_id = b.patient_id &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;and&lt;/SPAN&gt; &lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; &amp;lt;= abs(a.visit_date - b.visit_date) &amp;lt;= &lt;/SPAN&gt;&lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.type = b.type;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 08:43:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191050#M266094</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-23T08:43:09Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191051#M266095</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Not sure if this would speed it up but:&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create table WANT as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.*,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Do you really need all variables? */&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; COALESCE(A.CONDITION,B.CONDITION) as CONDITION&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (select *,datepart(VISIT_DATE) as DTE1) HAVE1 A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;/* I assume you use abs() as datetime variable? */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join&amp;nbsp;&amp;nbsp; (select *,datepart(VISIT_DATE) as DTE2) HAVE2 B&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.PATIENT_ID=B.PATIENT_ID&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.DTE - B.DTE in (0,1);&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As for datastep, well you would need to sort both of them.&amp;nbsp; Then:&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge have1 (rename=(visit_date=dte1)) have2 (rename=(visit_date=dte2) keep=patient_id condition visit_date);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by patient_id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 0 &amp;lt;= (datepart(dte1) - datepart(dte2)) &amp;lt;= 1 then output;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 09:05:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191051#M266095</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2014-07-23T09:05:52Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191052#M266096</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Post your sample data and&amp;nbsp; the output you need .&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 13:00:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191052#M266096</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-07-23T13:00:54Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191053#M266097</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sample data would give a better picture of the problem. Based on the above sql query, I'll try data step in this way&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have1;&lt;BR /&gt;by patient_id type;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have2;&lt;BR /&gt;by patient_id type;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;merge have1(in=a rename=(visit_date=dte1)) have2(in=b rename=(visit_date=dte2));&lt;/P&gt;&lt;P&gt;by patient_id type;&lt;/P&gt;&lt;P&gt;if a and 0&amp;lt;=abs(dte1 - dte2)&amp;lt;=1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 16:41:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191053#M266097</guid>
      <dc:creator>stat_sas</dc:creator>
      <dc:date>2014-07-23T16:41:05Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191054#M266098</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Clearly we don't see the problem -&lt;/P&gt;&lt;P&gt;which involves the physical size of your data&lt;/P&gt;&lt;P&gt;and system capacity on the utility areas that proc sql would use for sorting &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and we see none of the opportunity to improve run-time that might be possible depending&lt;/P&gt;&lt;P&gt;on database platforms holding your data&lt;/P&gt;&lt;P&gt;and indexes that might be available&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;so we cannot offer much reliable guidance until we know more&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;except here are some rules and ideas&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;since you demand a.dte and b.dte both be present for your join clause, why not use an inner join&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you have no indexes and your large data are stored in standard sas datasets&lt;/P&gt;&lt;P&gt;consider pre- sorting using tagsort option, selecting just the columns you need for the join&lt;/P&gt;&lt;P&gt;If you keep the original row numbers you can return later to the large data and pick out just the rows you need by POINT-ing to the required rows&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;consider streamlining the sql join especially if you can remove that ABS() function&lt;/P&gt;&lt;P&gt;For example&lt;/P&gt;&lt;P&gt;select {whatever}&lt;/P&gt;&lt;P&gt;from have1 a, have2 b&lt;/P&gt;&lt;P&gt;Where a.dte = ( b.dte-1)&lt;/P&gt;&lt;P&gt;and a.id= b.id and a.type=b.type&lt;/P&gt;&lt;P&gt;To collect the other cases (of the results from abs() function) add a "union all" of a similar SELECT but reversing the DTE calculation in the where clause.&lt;/P&gt;&lt;P&gt;Most databases including sas sql struggle to optimise joins and where clauses involving OR conditions which you are hiding in that ABS()&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If these ideas seem alien check out the papers on optimising your sql and data steps, while you wait for your code to run&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 19:00:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191054#M266098</guid>
      <dc:creator>Peter_C</dc:creator>
      <dc:date>2014-07-23T19:00:23Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191055#M266099</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you, RW9!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The abs() function is there to allow for difference in date within 1 day because sometimes the database has date difference.&amp;nbsp; And 1 day difference is okay.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 20:45:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191055#M266099</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-23T20:45:35Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191056#M266100</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Ksharp:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The data is not too big.&amp;nbsp; Only 6 GB in total and much smaller if I keep only a few variables.&amp;nbsp; But it take extremely long time to run on a PC with plenty of system resources.&amp;nbsp; Hardware is definitely not a constraint.&amp;nbsp; It is possible that the algorithm deployed by SQL is not efficient.&amp;nbsp; I used &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;_method buffersize=1G to no avail.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 20:47:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191056#M266100</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-23T20:47:43Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191057#M266101</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Will pre-sorting actually help in the SQL?&amp;nbsp; It seems to me that proc sql is a different econsystem that don't use the sorting in the data to make runtime shorter.&amp;nbsp; Instead, it just does its own thing.&amp;nbsp; That is why I'm thinking use DATA STEP to force SAS to use the sorting I've done. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorting the data takes only about 30 seconds.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Inner join is necessary here so that I can track how many missing variables or the quality of the matching.&amp;nbsp; If I use inner join, I won't be able to know if there are duplicate merge and etc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In fact, I tried to use group by and having statement to make the matching even more robust but when I run that code, I found the disk activity is several KB per second, which is abnormally low given the system resource that SAS can deploy. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does changing some of the system option help?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 20:49:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191057#M266101</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-23T20:49:59Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191058#M266102</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'll give it a try to see if this method works better on the PC.&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 20:53:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191058#M266102</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-23T20:53:53Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191059#M266103</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;proc sql _method ;&lt;/P&gt;&lt;P&gt;persuades sql to reveal the join techniques that it has adopted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;(often&amp;nbsp; databases spool one of the tables of a left join leading to performance problems&amp;nbsp; because they don't like using null in joins&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since your data sort quickly&lt;/P&gt;&lt;P&gt;A datastep merge would only cause problems where you have more than one row per ID and TYPE as it doesn't do cartesians&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 21:08:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191059#M266103</guid>
      <dc:creator>Peter_C</dc:creator>
      <dc:date>2014-07-23T21:08:39Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191060#M266104</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think the problem is that using a function with arguments from both tables is resolved by creating a cartesian product before the function is evaluated.&amp;nbsp; Fortunately, simple comparisons usually perform much better.&amp;nbsp; Try this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;sql&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;create&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;table&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; want &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;select&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: teal; background: white;"&gt;a.&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;*, coalesce(a.condition, b.condition) &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; condition&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;from&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have1 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;left&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;join&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have2 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; b&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;on&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.patient_id = b.patient_id&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.type = b.type&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;where&lt;/SPAN&gt; &lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;-1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; &amp;lt;= (a.visit_date - b.visit_date) &amp;lt;= &lt;/SPAN&gt;&lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;Placing the 'inexact' matching of dates in separate where clause may allow the SQL optimiser to evaluate this condition after it has evaluated the 'exact' match.&amp;nbsp; Alternatively, try:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;sql&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;create&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;table&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; want &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;&amp;nbsp;&amp;nbsp; select&amp;nbsp; &lt;SPAN style="color: teal; font-size: 10pt; background: white; font-family: Consolas;"&gt;c.&lt;/SPAN&gt;* from&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;select&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: teal; background: white;"&gt;a.&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;*, coalesce(a.condition, b.condition) &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; condition, &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;b.visit_date &lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;as&lt;/SPAN&gt; &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;b_visit_date&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;from&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have1 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;left&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;join&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have2 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; b&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;on&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.patient_id = b.patient_id&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.type = b.type) &lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;as&lt;/SPAN&gt; c&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;where&lt;/SPAN&gt; &lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;-1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; &amp;lt;= (visit_date - b_visit_date) &amp;lt;= &lt;/SPAN&gt;&lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt; &lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Jul 2014 05:32:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191060#M266104</guid>
      <dc:creator>DaveBirch</dc:creator>
      <dc:date>2014-07-24T05:32:15Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191061#M266105</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Doesn't the use of b_dte in the where clause, eliminate rows selected by the Left side of the join which have no matching rows from the right side?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Jul 2014 06:59:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191061#M266105</guid>
      <dc:creator>Peter_C</dc:creator>
      <dc:date>2014-07-24T06:59:53Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191062#M266106</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, you're correct - values that are missing/absent in where clauses due to no matching rows from the right side will turn a LEFT JOIN into an INNER JOIN.&amp;nbsp; One of the better reasons for converting an SQL join into a data step merge is get better control over like that.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, my second offering could be easily fixed:&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;sql&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;create&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;table&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; want &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;&amp;nbsp;&amp;nbsp; select&amp;nbsp; &lt;SPAN style="color: teal; font-size: 10pt; background: white; font-family: Consolas;"&gt;c.&lt;/SPAN&gt;* from&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;select&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: teal; background: white;"&gt;a.&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;*, coalesce(a.condition, b.condition) &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; condition, &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;b.visit_date &lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;as&lt;/SPAN&gt; &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;b_visit_date&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;from&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have1 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;left&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;join&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; have2 &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;as&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; b&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 10pt;"&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; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;on&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.patient_id = b.patient_id&lt;/SPAN&gt; &lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; a.type = b.type) &lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;as&lt;/SPAN&gt; c&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;where &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;b_visit_date = . or&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;-1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; &amp;lt;= (visit_date - b_visit_date) &amp;lt;= &lt;/SPAN&gt;&lt;SPAN style="color: teal; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;or, you could try this variation to the response by stat@sas:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; want&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="font-family: Consolas; color: blue; background: white;"&gt;merge&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;have1(in=a) &lt;/SPAN&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;have2(in=b rename=(&lt;/SPAN&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;visit_date=&lt;/SPAN&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;b_visit_date));&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&amp;nbsp; &lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;by &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;patient_id &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;type;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&amp;nbsp; i&lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;f &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;a &lt;SPAN style="color: blue; font-size: 10pt; background: white; font-family: Consolas;"&gt;and &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;abs(visit_date - b_visit_date) &amp;lt;= &lt;SPAN style="color: black; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;SPAN style="color: teal; font-size: 10pt; background: white; font-family: Consolas;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;;&amp;nbsp; /* the only result less than 0 for abs() is missing */&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN style="color: navy; font-family: Consolas; background: white;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Consolas; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Jul 2014 08:06:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191062#M266106</guid>
      <dc:creator>DaveBirch</dc:creator>
      <dc:date>2014-07-24T08:06:03Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191063#M266107</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for telling me the caveat for the data step!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 27 Jul 2014 00:07:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191063#M266107</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-27T00:07:37Z</dc:date>
    </item>
    <item>
      <title>Re: data step to merge for a date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191064#M266108</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you, guys.&amp;nbsp; I'll implement this too see if this procedure get the problems resolved.&amp;nbsp; &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Really appreciate the help ! &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 27 Jul 2014 00:12:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-to-merge-for-a-date-range/m-p/191064#M266108</guid>
      <dc:creator>caveman529</dc:creator>
      <dc:date>2014-07-27T00:12:00Z</dc:date>
    </item>
  </channel>
</rss>

