<?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: how do I lag continuous dates by a specific variable? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950091#M371570</link>
    <description>&lt;P&gt;For the sake of the robust/strong of code, I would like to use this code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs ;
input id	facility $	(amit	release) (:date9.);
format amit	release date9.;
cards;
1	A	09OCT23	22DEC23
1	B	23JUL24	27AUG24
1	B	27AUG24	30AUG24
1	A	30AUG24	.
2	A	15DEC23	14JAN24
2	B	14JAN24	22JAN24
2	A	22JAN24	08MAR24
;

data temp;
  set have;
  do date=amit to coalesce(release,date());
   output;
  end;
  keep id facility date;
run;
proc sort data=temp;by id date;run;
data temp2;
 set temp;
 by id;
 if first.id or dif(date)&amp;gt;1 then group+1;
run;
proc sql;
create table want as
 select group,id,facility,min(date) as amit	format=date9.,ifn(max(date)=date(),.,max(date)) as release format=date9.
  from temp2
   where facility='A'
    group by group,id,facility;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 07 Nov 2024 02:01:15 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2024-11-07T02:01:15Z</dc:date>
    <item>
      <title>how do I lag continuous dates by a specific variable?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950080#M371564</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I have a listing of patients and their dates of admits and releases by facility type.&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example, patient 1 has four lines. He was in facility A from&amp;nbsp;09OCT23 -&amp;nbsp;22DEC23 then facility B continuously from&amp;nbsp;23JUL24 -&amp;nbsp;. (current).&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like in my final table to have only 2 lines for patient 1: admit=09OCT23 - release=22DEC23 and admit=30AUG24 - release=.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I only care about the admits for facility A, BUT if he was in facility A and was transferred to facility B in a continous time series, I want the last release date in the series, regadless of the facility. In this scenario, he started on&amp;nbsp;23JUL24 in facility B and ended in facility A but I only want the facility A date range admit=30AUG24 and release=.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please help, I tried with retain, with LAG... but without success... Thank you.&lt;/P&gt;&lt;P&gt;my initial table:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;facility&lt;/TD&gt;&lt;TD&gt;amit&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;09OCT23&lt;/TD&gt;&lt;TD&gt;22DEC23&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;23JUL24&lt;/TD&gt;&lt;TD&gt;27AUG24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;27AUG24&lt;/TD&gt;&lt;TD&gt;30AUG24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;30AUG24&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;15DEC23&lt;/TD&gt;&lt;TD&gt;14JAN24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;14JAN24&lt;/TD&gt;&lt;TD&gt;22JAN24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;22JAN24&lt;/TD&gt;&lt;TD&gt;08MAR24&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and my final table would be:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;facility&lt;/TD&gt;&lt;TD&gt;admit&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;09OCT23&lt;/TD&gt;&lt;TD&gt;22DEC23&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;30AUG24&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;15DEC23&lt;/TD&gt;&lt;TD&gt;08MAR24&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here's what I tried:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;proc sort data=DELETE; by id admit;
data TEST (drop=_:);
do until ((release+1 &amp;lt; _next_admit) or last.juvnum=1);
set DELETE;
by id admit;
merge DELETE DELETE (firstobs=2 keep=admit rename=(admit=_next_admit));
_min_admit=min(_min_admit,admit);
if release=. and last.admit=0 then release=_next_admit-1;
end;
admit=_min_admit;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But, with this code, I get this. The first record is okay, but the second line starts with the admit of facility B and I only want facility A admits and then the release date is that of the next id admit.&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;facility&lt;/TD&gt;&lt;TD&gt;admit&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;09OCT23&lt;/TD&gt;&lt;TD&gt;22DEC23&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;23JUL24&lt;/TD&gt;&lt;TD&gt;15DEC23&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;15DEC23&lt;/TD&gt;&lt;TD&gt;08MAR24&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 06 Nov 2024 20:15:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950080#M371564</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2024-11-06T20:15:40Z</dc:date>
    </item>
    <item>
      <title>Re: how do I lag continuous dates by a specific variable?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950086#M371566</link>
      <description>&lt;P&gt;Sample data please, in a working DATA step.&amp;nbsp; Help us help you.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 06 Nov 2024 23:14:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950086#M371566</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2024-11-06T23:14:03Z</dc:date>
    </item>
    <item>
      <title>Re: how do I lag continuous dates by a specific variable?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950087#M371567</link>
      <description>&lt;P&gt;You need a way to look ahead at the next observation, to compare its ADMIT date with the current RELEASE.&amp;nbsp; If they don't overlap, then you can output:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input id	facility :$1.	admit :date9.	release :date9.;
  format admit release date9.;
datalines;
1	A	09OCT23	22DEC23
1	B	23JUL24	27AUG24
1	B	27AUG24	30AUG24
1	A	30AUG24	.
2	A	15DEC23	14JAN24
2	B	14JAN24	22JAN24
2	A	22JAN24	08MAR24
run;

data want (drop=_: nxt_: );
  do until (last.id or release &amp;lt; nxt_admit);
    set have ;
    by id;
    merge have 
          have (firstobs=2 keep=admit rename=(admit=nxt_admit));
    if facility='A' then _initial_admit=coalesce(_initial_admit,admit);
  end;
  if _initial_admit^=.;
  admit=_initial_admit;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 08 Nov 2024 01:58:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950087#M371567</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2024-11-08T01:58:58Z</dc:date>
    </item>
    <item>
      <title>Re: how do I lag continuous dates by a specific variable?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950088#M371568</link>
      <description>&lt;P&gt;There are too many scenarios you need to consider about.&lt;/P&gt;
&lt;P&gt;Assuming I understood what you mean.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have;
infile cards expandtabs ;
input id	facility $	(amit	release) (:date9.);
format amit	release date9.;
cards;
1	A	09OCT23	22DEC23
1	B	23JUL24	27AUG24
1	B	27AUG24	30AUG24
1	A	30AUG24	.
2	A	15DEC23	14JAN24
2	B	14JAN24	22JAN24
2	A	22JAN24	08MAR24
;

data temp;
  set have;
  by id;
  if first.id or amit&amp;gt;lag(release)+1 then group+1;
run;
data want;
 set temp;
 by group;
 retain temp found;
 if first.group then call missing(temp,found);
 if facility='A' and not found then do;temp=amit;found=1;end;

 if last.group then do;
   amit=coalesce(temp,amit);
   output;
 end;
 drop group temp found;
run;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Nov 2024 01:42:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950088#M371568</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-11-07T01:42:16Z</dc:date>
    </item>
    <item>
      <title>Re: how do I lag continuous dates by a specific variable?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950091#M371570</link>
      <description>&lt;P&gt;For the sake of the robust/strong of code, I would like to use this code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs ;
input id	facility $	(amit	release) (:date9.);
format amit	release date9.;
cards;
1	A	09OCT23	22DEC23
1	B	23JUL24	27AUG24
1	B	27AUG24	30AUG24
1	A	30AUG24	.
2	A	15DEC23	14JAN24
2	B	14JAN24	22JAN24
2	A	22JAN24	08MAR24
;

data temp;
  set have;
  do date=amit to coalesce(release,date());
   output;
  end;
  keep id facility date;
run;
proc sort data=temp;by id date;run;
data temp2;
 set temp;
 by id;
 if first.id or dif(date)&amp;gt;1 then group+1;
run;
proc sql;
create table want as
 select group,id,facility,min(date) as amit	format=date9.,ifn(max(date)=date(),.,max(date)) as release format=date9.
  from temp2
   where facility='A'
    group by group,id,facility;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Nov 2024 02:01:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-do-I-lag-continuous-dates-by-a-specific-variable/m-p/950091#M371570</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-11-07T02:01:15Z</dc:date>
    </item>
  </channel>
</rss>

