<?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: combining daisy chained same day admission/discharge dates in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567800#M159720</link>
    <description>&lt;P&gt;Hi Reeza;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Yea I end to over-engineer the heck outta code sometimes.&amp;nbsp; I'll do a search on the terms. Thanks for the terms to seach by-I think that was my challenge.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best-&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 20 Jun 2019 22:37:28 GMT</pubDate>
    <dc:creator>LB</dc:creator>
    <dc:date>2019-06-20T22:37:28Z</dc:date>
    <item>
      <title>combining daisy chained same day admission/discharge dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567778#M159709</link>
      <description>&lt;P&gt;In approximately 300K admissions, I have about maybe 150 admissions where the admission date is the same date as a previous admission.&amp;nbsp; While I resolved when there is only two occasions, if there are more I get stuck-&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For example Below- In the first table for A, in the end I want the 22SEP arrival time with the 17DEC discharge. b patient is fine&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I attempted to write an array (below) but got stuck.&lt;/P&gt;
&lt;P&gt;If there is an easier way I am all ears-&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;TIA&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;HAVE&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="346"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="92"&gt;ID&lt;/TD&gt;
&lt;TD width="127"&gt;ARRIVAL_TIME&lt;/TD&gt;
&lt;TD width="127"&gt;HOSP_DISCH_TIME&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a&lt;/TD&gt;
&lt;TD&gt;22Sep2010 16:17:00&lt;/TD&gt;
&lt;TD&gt;01Oct2010 19:10:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a&lt;/TD&gt;
&lt;TD&gt;01Oct2010 19:30:00&lt;/TD&gt;
&lt;TD&gt;08Oct2010 13:44:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a&lt;/TD&gt;
&lt;TD&gt;08Oct2010 13:45:00&lt;/TD&gt;
&lt;TD&gt;09Oct2010 16:29:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a&lt;/TD&gt;
&lt;TD&gt;09Oct2010 16:30:00&lt;/TD&gt;
&lt;TD&gt;07Dec2010 22:50:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a&lt;/TD&gt;
&lt;TD&gt;07Dec2010 23:18:00&lt;/TD&gt;
&lt;TD&gt;17Dec2010 7:07:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;b&lt;/TD&gt;
&lt;TD&gt;26MAY2010:12:12:00&lt;/TD&gt;
&lt;TD&gt;27MAY2010:08:30:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;b&lt;/TD&gt;
&lt;TD&gt;28MAY2010:09:42:00&lt;/TD&gt;
&lt;TD&gt;29MAY2010:12:45:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;b&lt;/TD&gt;
&lt;TD&gt;11JUN2010:06:48:00&lt;/TD&gt;
&lt;TD&gt;12JUN2010:11:50:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Want&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;ID&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a&lt;/TD&gt;
&lt;TD&gt;22Sep2010 16:17:00&lt;/TD&gt;
&lt;TD&gt;17Dec2010 7:07:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;b&lt;/TD&gt;
&lt;TD&gt;26MAY2010:12:12:00&lt;/TD&gt;
&lt;TD&gt;27MAY2010:08:30:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;b&lt;/TD&gt;
&lt;TD&gt;28MAY2010:09:42:00&lt;/TD&gt;
&lt;TD&gt;29MAY2010:12:45:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;b&lt;/TD&gt;
&lt;TD&gt;11JUN2010:06:48:00&lt;/TD&gt;
&lt;TD&gt;12JUN2010:11:50:00&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;data have;&lt;BR /&gt;input id $ 1 arrival_time datetime19. HOSP_DISCH_TIME datetime19.;&lt;BR /&gt;format arrival_time HOSP_DISCH_TIME datetime19.;&lt;BR /&gt;datalines;&lt;BR /&gt;a 22Sep2010 16:17:00 01Oct2010 19:10:00&lt;BR /&gt;a 01Oct2010 19:30:00 08Oct2010 13:44:00&lt;BR /&gt;a 08Oct2010 13:45:00 09Oct2010 16:29:00&lt;BR /&gt;a 09Oct2010 16:30:00 07Dec2010 22:50:00&lt;BR /&gt;a 07Dec2010 23:18:00 17Dec2010 7:07:00&lt;BR /&gt;b 26MAY2010:12:12:00 27MAY2010:08:30:00&lt;BR /&gt;b 28MAY2010:09:42:00 29MAY2010:12:45:00&lt;BR /&gt;b 11JUN2010:06:48:00 12JUN2010:11:50:00&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc transpose data=have out=Arrival_start PREFIX=ARRIV;&lt;BR /&gt;by ID;&lt;BR /&gt;var arrival_time;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=have out=DISCH PREFIX=DISCH;&lt;BR /&gt;by ID;;&lt;BR /&gt;var HOSP_DISCH_TIME;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc contents data=Arrival_start out=numx1;&lt;BR /&gt;run;&lt;BR /&gt;proc sql;&lt;BR /&gt;select distinct left(put(max(input(substr(NAME,6),8.)),8.)) into :arrx3 from numx1;&lt;BR /&gt;select distinct left(put(max(input(substr(NAME,6),8.)-1),8.)) into :arrx4 from numx1;&lt;BR /&gt;quit;&lt;/P&gt;
&lt;P&gt;data rehosp;&lt;BR /&gt;retain pat_mrn_id ARRIV1 DISCH1 ARRIV2 wt1 wtx1 DISCH2 ARRIV3 wt2 wtx2 DISCH3 ARRIV4 wt3 wtx3 ARRIV5 DISCH4 wt4 wtx4 DISCH5 ARRIV6 wt5 wtx5 ;&lt;/P&gt;
&lt;P&gt;merge Arrival_start DISCH;&lt;BR /&gt;by id;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;array ARRIV (*) ARRIV2-ARRIV&amp;amp;arrx3;&lt;BR /&gt;array DISCH (*) DISCH:;&lt;/P&gt;
&lt;P&gt;array wt {&amp;amp;arrx4} wt1-wt&amp;amp;arrx4;&lt;BR /&gt;array wtx {&amp;amp;arrx4} wtx1-wtx&amp;amp;arrx4;&lt;BR /&gt;array wte {&amp;amp;arrx4} wte1-wte&amp;amp;arrx4;&lt;/P&gt;
&lt;P&gt;do l=1 to &amp;amp;arrx4;&lt;BR /&gt;wt[l}=intck('dtday',DISCH(l),ARRIV(l));&lt;/P&gt;
&lt;P&gt;if wt[l} ne 0 then wtx{l}= DISCH(l); &lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;else ??????&amp;nbsp;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR /&gt;end;&lt;BR /&gt;format wtx1-wtx7 datetime19. ;&lt;BR /&gt;KEEP pat_mrn_id ARRIV1-ARRIV7 DISCH1-DISCh7 wt1-wt7 wtx1-wtx7 ;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Thu, 20 Jun 2019 21:19:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567778#M159709</guid>
      <dc:creator>LB</dc:creator>
      <dc:date>2019-06-20T21:19:50Z</dc:date>
    </item>
    <item>
      <title>Re: combining daisy chained same day admission/discharge dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567798#M159718</link>
      <description>YOu really don't need to transpose your data and you don't need all that extra logic. You can use LAG() to get the previous date and retain it until the interval between dates is greater than 1. If you search on here for 'collapse records' or 'identify episodes' you'll likely find a lot of examples. I don't have time to write up an answer but someone likely will soon, and if not, this should help you move forward.&lt;BR /&gt;</description>
      <pubDate>Thu, 20 Jun 2019 22:34:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567798#M159718</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-06-20T22:34:26Z</dc:date>
    </item>
    <item>
      <title>Re: combining daisy chained same day admission/discharge dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567800#M159720</link>
      <description>&lt;P&gt;Hi Reeza;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Yea I end to over-engineer the heck outta code sometimes.&amp;nbsp; I'll do a search on the terms. Thanks for the terms to seach by-I think that was my challenge.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best-&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 20 Jun 2019 22:37:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567800#M159720</guid>
      <dc:creator>LB</dc:creator>
      <dc:date>2019-06-20T22:37:28Z</dc:date>
    </item>
    <item>
      <title>Re: combining daisy chained same day admission/discharge dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567836#M159737</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/10675"&gt;@LB&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;The idea of using arrays is sound. Perhaps using LAG, POINT=, or shifted merge to compare the values from adjacent observations is simpler, but at the moment I'm kind of tired of those, so let's use an array. The logic below is fairly straightforward; it just ought to be implemented diligently. Note that (a) the 2nd array dimension, 99999, is merely chosen as "big enough" (I doubt one can make more than 99999 hospital visits in one's lifetime); and (b) I've taken the liberty to rename&amp;nbsp;ARRIVAL_TIME and HOSP_DISCH_TIME to ADM_DT and DIS_DT, respectively.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                                                          
  input id:$1. (adm_dt dis_dt) (:datetime18.) ;                      
  format _numeric_ datetime18. ;                                     
  cards ;                                                            
A  22Sep2010:16:17:00  01Oct2010:19:10:00                            
A  01Oct2010:19:30:00  08Oct2010:13:44:00                            
A  08Oct2010:13:45:00  09Oct2010:16:29:00                            
A  09Oct2010:16:30:00  07Dec2010:22:50:00                            
A  07Dec2010:23:18:00  17Dec2010:07:07:00                            
B  26MAY2010:12:12:00  27MAY2010:08:30:00                            
B  28MAY2010:09:42:00  29MAY2010:12:45:00                            
B  11JUN2010:06:48:00  12JUN2010:11:50:00                            
run ;                                                                
                                                                     
data need (keep = id adm_dt dis_dt) ;                                
  do q = 1 by 1 until (last.id) ;                                    
    set have ;                                                       
    by ID ;                                                          
    array dd [2,99999] _temporary_ ;                                
    j = sum (j,1) ;                                                  
    dd[1,j] = datepart (adm_dt) ;                                    
    dd[2,j] = adm_dt ;                                               
    j = sum (j,1) ;                                                  
    dd[1,j] = datepart (dis_dt) ;                                    
    dd[2,j] = dis_dt ;                                               
  end ;                                                              
  do j = 2 to 2 * (q - 1) by 2 ;                                     
    if dd[1,j] = dd[1,j+1] then call missing (dd[1,j], dd[1,j+1]) ;
  end ;                                                              
  do j = 1 to 2 * q ;                                                
    if missing (dd[1,j]) then continue ;                            
    k = sum (k, 1) ;                                                 
    if mod (k,2) then adm_dt = dd[2,j] ;                             
    else do ;                                                        
      dis_dt = dd[2,j] ;                                             
      output ;                                                       
    end ;                                                            
  end ;                                                              
run ;                                                                
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 21 Jun 2019 05:46:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567836#M159737</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-06-21T05:46:23Z</dc:date>
    </item>
    <item>
      <title>Re: combining daisy chained same day admission/discharge dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567948#M159781</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262"&gt;@hashman&lt;/a&gt;&amp;nbsp; -Worked like a charm-Much appreciated!&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 21 Jun 2019 15:14:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-daisy-chained-same-day-admission-discharge-dates/m-p/567948#M159781</guid>
      <dc:creator>LB</dc:creator>
      <dc:date>2019-06-21T15:14:00Z</dc:date>
    </item>
  </channel>
</rss>

