<?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: Collapsing inpatient admissions in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326875#M72875</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/12887"&gt;@ErikLund_Jensen&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why would a self-merge inside a loop be inefficient?&amp;nbsp;&amp;nbsp;The two data streams (3 if you count the SET statement) are synchronzied, taking advantage of the data set order.&amp;nbsp; The same disk i/o buffer would be used for all&amp;nbsp;data streams, reducing disk input/output operations.&amp;nbsp; Once a small group of records is completely processed, they are flushed from memory.&amp;nbsp; This all makes the operating system very happy.&amp;nbsp;&amp;nbsp; It's effectively one pass of the data, requires no creation of an intermediate data set, and doesn't use much memory.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The alternative you propose has two&amp;nbsp;unsynchronized reads of data set have in the proc sql.&amp;nbsp; And SQL (apparently) does not know the data set order, so it has to hold all the keys (and data) of one side of the join&amp;nbsp;in memory (or in utility files on disk) in order to have all&amp;nbsp;those keys available for matching against every record in the other side of the join.&amp;nbsp; It also writes and rereads an intermediate data set on the way to data set WANT.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I admit, when data set have is sorted in a useful way, I am NOT a fan of sql in these situations.&lt;/P&gt;</description>
    <pubDate>Mon, 23 Jan 2017 22:21:13 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2017-01-23T22:21:13Z</dc:date>
    <item>
      <title>Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326789#M72846</link>
      <description>&lt;P&gt;I have a tricky problem collapsing inpatient hospital admissions and haven't had success getting a solution from previous blog posts. What I would like to do, is collapse rows where the ADMISSION_START_DT = the ADMISSION_END_DT of the preceeding row. The idea is that this is really one admission. In this event I would like to keep the APR_MDC_DESC and HOSPITAL_ID from the more current, second row.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the event that the ADMISSION_START_DT is &amp;lt; 15 days from the ADMISSION_END_DT from the preceeding row, I would like to populate a new variable, READMIT_FLAG_15_DAY so that we can track readmissions.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have some sample data below. Any help would be greatly appreciated.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Have&lt;/P&gt;
&lt;TABLE width="1096"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;PATIENT_ID&lt;/TD&gt;
&lt;TD width="256"&gt;ADMISSION_START_DT&lt;/TD&gt;
&lt;TD width="150"&gt;ADMISSION_END_DT&lt;/TD&gt;
&lt;TD width="256"&gt;APR_MDC_DESC&lt;/TD&gt;
&lt;TD width="94"&gt;SERVICE_CAT&lt;/TD&gt;
&lt;TD width="256"&gt;HOSPITAL_ID&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;24-Nov-15&lt;/TD&gt;
&lt;TD width="150"&gt;26-Nov-15&lt;/TD&gt;
&lt;TD width="256"&gt;Diabetes&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;26-Nov-15&lt;/TD&gt;
&lt;TD width="150"&gt;3-Dec-15&lt;/TD&gt;
&lt;TD width="256"&gt;Surgery&lt;/TD&gt;
&lt;TD width="94"&gt;SURG&lt;/TD&gt;
&lt;TD width="256"&gt;456&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;16-Jan-16&lt;/TD&gt;
&lt;TD width="150"&gt;22-Jan-16&lt;/TD&gt;
&lt;TD width="256"&gt;Hypertension&amp;nbsp;&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;25-Feb-16&lt;/TD&gt;
&lt;TD width="150"&gt;29-Feb-16&lt;/TD&gt;
&lt;TD width="256"&gt;Diabetes&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;29-Feb-16&lt;/TD&gt;
&lt;TD width="150"&gt;29-Feb-16&lt;/TD&gt;
&lt;TD width="256"&gt;Observation&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;2-Mar-16&lt;/TD&gt;
&lt;TD width="150"&gt;2-Mar-16&lt;/TD&gt;
&lt;TD width="256"&gt;Hypertension&amp;nbsp;&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;19-Mar-16&lt;/TD&gt;
&lt;TD width="150"&gt;23-Mar-16&lt;/TD&gt;
&lt;TD width="256"&gt;Observation&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Want&lt;/P&gt;
&lt;TABLE width="1160"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;PATIENT_ID&lt;/TD&gt;
&lt;TD width="256"&gt;ADMISSION_START_DT&lt;/TD&gt;
&lt;TD width="150"&gt;ADMISSION_END_DT&lt;/TD&gt;
&lt;TD width="256"&gt;APR_MDC_DESC&lt;/TD&gt;
&lt;TD width="94"&gt;SERVICE_CAT&lt;/TD&gt;
&lt;TD width="256"&gt;HOSPITAL_ID&lt;/TD&gt;
&lt;TD width="64"&gt;READMIT_FLAG_15_DAY&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;24-Nov-15&lt;/TD&gt;
&lt;TD width="150"&gt;3-Dec-15&lt;/TD&gt;
&lt;TD width="256"&gt;Surgery&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;456&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;16-Jan-16&lt;/TD&gt;
&lt;TD width="150"&gt;22-Jan-16&lt;/TD&gt;
&lt;TD width="256"&gt;Hypertension&amp;nbsp;&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;25-Feb-16&lt;/TD&gt;
&lt;TD width="150"&gt;29-Feb-16&lt;/TD&gt;
&lt;TD width="256"&gt;Observation&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;2-Mar-16&lt;/TD&gt;
&lt;TD width="150"&gt;2-Mar-16&lt;/TD&gt;
&lt;TD width="256"&gt;Hypertension&amp;nbsp;&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;ABC&lt;/TD&gt;
&lt;TD width="256"&gt;19-Mar-16&lt;/TD&gt;
&lt;TD width="150"&gt;23-Mar-16&lt;/TD&gt;
&lt;TD width="256"&gt;Observation&lt;/TD&gt;
&lt;TD width="94"&gt;MED&lt;/TD&gt;
&lt;TD width="256"&gt;123&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 23 Jan 2017 17:45:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326789#M72846</guid>
      <dc:creator>mikemangini</dc:creator>
      <dc:date>2017-01-23T17:45:00Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326805#M72849</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is easily solved with the LAG function. Note that this code puts the Y in the second-last row, where I suppose it ought to be according to your spec, and not in the last.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Just to get your data into SAS - ;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input PATIENT_ID $3. @&lt;STRONG&gt;5&lt;/STRONG&gt; ADMISSION_START_DT anydtdte9. @&lt;STRONG&gt;15&lt;/STRONG&gt; ADMISSION_END_DT anydtdte9.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;STRONG&gt;25&lt;/STRONG&gt; APR_MDC_DESC $12. @&lt;STRONG&gt;38&lt;/STRONG&gt; SERVICE_CAT $4. @&lt;STRONG&gt;43&lt;/STRONG&gt; HOSPITAL_ID &lt;STRONG&gt;8.&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; format ADMISSION_START_DT ADMISSION_END_DT ddmmyy10.;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cards;&lt;/P&gt;
&lt;P&gt;ABC 24-Nov-15 26-Nov-15 Diabetes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MED&amp;nbsp; 123&lt;/P&gt;
&lt;P&gt;ABC 26-Nov-15 3-Dec-15&amp;nbsp; Surgery&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SURG 456&lt;/P&gt;
&lt;P&gt;ABC 16-Jan-16 22-Jan-16 Hypertension MED&amp;nbsp; 123&lt;/P&gt;
&lt;P&gt;ABC 25-Feb-16 29-Feb-16 Diabetes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MED&amp;nbsp; 123&lt;/P&gt;
&lt;P&gt;ABC 29-Feb-16 29-Feb-16 Observation&amp;nbsp; MED&amp;nbsp; 123&lt;/P&gt;
&lt;P&gt;ABC 2-Mar-16&amp;nbsp; 2-Mar-16&amp;nbsp; Hypertension MED&amp;nbsp; 123&lt;/P&gt;
&lt;P&gt;ABC 19-Mar-16 23-Mar-16 Observation&amp;nbsp; MED&amp;nbsp; 123;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Sort in ascending date order pr patient - just to make sure..;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt; &lt;STRONG&gt;sort&lt;/STRONG&gt; data=have; by PATIENT_ID ADMISSION_START_DT;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* And here is where the LAG function comes in handy..;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; want (drop=Old_End); set have; by PATIENT_ID;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Old_End = lag(ADMISSION_END_DT);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not first.PATIENT_ID 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; if ADMISSION_START_DT = Old_End then delete;&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;else if (ADMISSION_START_DT - Old_End) &amp;lt; &lt;STRONG&gt;15&lt;/STRONG&gt; then READMIT_FLAG_15_DAY = 'Y';&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE border="1" cellspacing="0" cellpadding="2" bgcolor="#ffffff"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&amp;nbsp;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; PATIENT_ID &lt;/FONT&gt;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; ADMISSION_START_DT &lt;/FONT&gt;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; ADMISSION_END_DT &lt;/FONT&gt;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; APR_MDC_DESC &lt;/FONT&gt;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; SERVICE_CAT &lt;/FONT&gt;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; HOSPITAL_ID &lt;/FONT&gt;&lt;/TH&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; READMIT_FLAG_15_DAY &lt;/FONT&gt;&lt;/TH&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; 1 &lt;/FONT&gt;&lt;/TH&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; ABC &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 24/11/2015 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 26/11/2015 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; Diabetes &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; MED &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 123 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; 2 &lt;/FONT&gt;&lt;/TH&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; ABC &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 16/01/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 22/01/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; Hypertension &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; MED &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 123 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; 3 &lt;/FONT&gt;&lt;/TH&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; ABC &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 25/02/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 29/02/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; Diabetes &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; MED &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 123 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; 4 &lt;/FONT&gt;&lt;/TH&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; ABC &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 02/03/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 02/03/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; Hypertension &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; MED &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 123 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; Y &lt;/FONT&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH align="CENTER" valign="MIDDLE" bgcolor="#f0f0f0"&gt;&lt;FONT color="#000000"&gt; 5 &lt;/FONT&gt;&lt;/TH&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; ABC &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 19/03/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 23/03/2016 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; Observation &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; MED &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="RIGHT" valign="MIDDLE"&gt;&lt;FONT color="#000000"&gt; 123 &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD align="LEFT" valign="MIDDLE"&gt;&amp;nbsp;&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;</description>
      <pubDate>Mon, 23 Jan 2017 18:26:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326805#M72849</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2017-01-23T18:26:17Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326811#M72850</link>
      <description>&lt;P&gt;Why does the 5th record of your desired output have the flag='Y'?&amp;nbsp; Its start date is 19-mar-16 and the enddate of the preceding record is 2-mar-16, which is more than 15 days separation.&amp;nbsp; I believe you want the flag='Y' for the 4th record, yes?&amp;nbsp; (2-feb-16 vs 2-mar-16).&amp;nbsp; If so then this works:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data want (drop=next_stdate temp_:);

  do recnum=1 by 1 until (last.patient_id or next_stdate&amp;gt;admission_end_dt);
    set have (keep=patient_id);
    by patient_id;

    merge have
          have(firstobs=2 keep=admission_start_dt 
          rename=(admission_start_dt=next_stdate));
    if recnum=1 then do;
      temp_date=admission_start_dt;
      temp_cat=service_cat;
    end;
  end;

  if lag(patient_id)=patient_id 
     and admission_start_dt-15 &amp;lt; lag(admission_end_dt)
     then readmit_flag_15_day='Y';

  admission_start_dt=temp_date;
  service_cat=temp_cat;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Jan 2017 18:51:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326811#M72850</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-01-23T18:51:35Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326812#M72851</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/12887"&gt;@ErikLund_Jensen&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Your program deletes the latter record and keeps the earlier record.&amp;nbsp; I believe the OP wants the opposite.&amp;nbsp; I don't think lag alone is sufficient.&amp;nbsp; You need a way to look ahead and delete the prior record when it is known that the subsequent record has the desired data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Jan 2017 19:00:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326812#M72851</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-01-23T19:00:53Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326829#M72858</link>
      <description>You are right. I missed that one.</description>
      <pubDate>Mon, 23 Jan 2017 20:07:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326829#M72858</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2017-01-23T20:07:18Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326831#M72860</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;is right. It requires look-ahead. But I fear that using&amp;nbsp;a merge inside a loop in&amp;nbsp;the data step would not be very efficient with large data sets.&amp;nbsp;I suggest doing it in a previous step instead:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt; &lt;STRONG&gt;sql&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; create table inter as&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&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; a.PATIENT_ID,&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; a.ADMISSION_START_DT,&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; a.ADMISSION_END_DT,&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; coalesce(b.APR_MDC_DESC, a.APR_MDC_DESC) as APR_MDC_DESC,&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; a.SERVICE_CAT,&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; coalesce(b.HOSPITAL_ID, a.HOSPITAL_ID) as HOSPITAL_ID&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; from have as a left join have as b&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; on&amp;nbsp; a.PATIENT_ID = b.PATIENT_ID&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and a.ADMISSION_END_DT = b.ADMISSION_START_DT&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by a.PATIENT_ID, a.ADMISSION_START_DT;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; want2 (drop=Old_End); set inter; by PATIENT_ID;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; Old_End = lag(ADMISSION_END_DT);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; if not first.PATIENT_ID then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ADMISSION_START_DT = Old_End then delete;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (ADMISSION_START_DT - Old_End) &amp;lt; &lt;STRONG&gt;15&lt;/STRONG&gt; then READMIT_FLAG_15_DAY = 'Y';&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Jan 2017 20:16:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326831#M72860</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2017-01-23T20:16:40Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326832#M72861</link>
      <description>&lt;P&gt;Thank you for assisting with my question. I am still testing but your solution seems to be working great! You are correct on the 'Y' flag being put on the wrong record. As I was simplifying and deidentifying the records to create an example, I let that slip. Thanks again for your assistance!&lt;/P&gt;</description>
      <pubDate>Mon, 23 Jan 2017 20:17:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326832#M72861</guid>
      <dc:creator>mikemangini</dc:creator>
      <dc:date>2017-01-23T20:17:20Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326875#M72875</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/12887"&gt;@ErikLund_Jensen&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why would a self-merge inside a loop be inefficient?&amp;nbsp;&amp;nbsp;The two data streams (3 if you count the SET statement) are synchronzied, taking advantage of the data set order.&amp;nbsp; The same disk i/o buffer would be used for all&amp;nbsp;data streams, reducing disk input/output operations.&amp;nbsp; Once a small group of records is completely processed, they are flushed from memory.&amp;nbsp; This all makes the operating system very happy.&amp;nbsp;&amp;nbsp; It's effectively one pass of the data, requires no creation of an intermediate data set, and doesn't use much memory.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The alternative you propose has two&amp;nbsp;unsynchronized reads of data set have in the proc sql.&amp;nbsp; And SQL (apparently) does not know the data set order, so it has to hold all the keys (and data) of one side of the join&amp;nbsp;in memory (or in utility files on disk) in order to have all&amp;nbsp;those keys available for matching against every record in the other side of the join.&amp;nbsp; It also writes and rereads an intermediate data set on the way to data set WANT.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I admit, when data set have is sorted in a useful way, I am NOT a fan of sql in these situations.&lt;/P&gt;</description>
      <pubDate>Mon, 23 Jan 2017 22:21:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/326875#M72875</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-01-23T22:21:13Z</dc:date>
    </item>
    <item>
      <title>Re: Collapsing inpatient admissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/328277#M73286</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I humbly admit you are right. I tried both methods on a large unsorted data set with 1000000 Patient-ID's, and your approach is about 1.8&amp;nbsp;times faster on an empty machine and almost 4 times faster on a heavy loaded machine. Thanks for the lesson!.&lt;/P&gt;</description>
      <pubDate>Sun, 29 Jan 2017 11:33:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Collapsing-inpatient-admissions/m-p/328277#M73286</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2017-01-29T11:33:05Z</dc:date>
    </item>
  </channel>
</rss>

