<?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: Days between two dates of two observations within a group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832268#M328944</link>
    <description>&lt;P&gt;If it's just a matter of generating the sample results you posted, then:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Patient Date :mmddyy. Days_Supply End_date :mmddyy.;
  format date end_date yymmdd10.;
cards;
1 8/25/2014 30 9/27/2014
1 9/25/2014 30 10/25/2014
1 10/27/2014 30 11/26/2014
1 11/22/2014 30 12/22/2014
1 12/23/2014 30 1/22/2015
2 6/26/2018 30 7/26/2018
2 7/23/2018 30 8/22/2018
2 8/20/2018 30 9/19/2018
2 10/30/2018 30 11/29/2018
3 5/1/2014 30 5/31/2014
3 7/25/2014 30 8/24/2014
;

data want;
  set have;
  by patient;
  gap = date-lag(end_date);
  running_gap+gap;
  if first.patient then call missing(gap,running_gap);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This will generate a note on the log, saying:&lt;/P&gt;
&lt;PRE&gt;NOTE: Missing values were generated as a result of performing an operation on missing values.
      Each place is given by: (Number of times) at (Line):(Column).
      1 at LLL:cc
&lt;/PRE&gt;
&lt;P&gt;That's because the &lt;EM&gt;&lt;STRONG&gt;lag(end_date)&lt;/STRONG&gt;&lt;/EM&gt;&amp;nbsp;expression will return a missing value for the first observation in HAVE.&amp;nbsp; In turn that will produce the note when the statement&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;  gap = date-lag(end_date);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;tries to subtract that missing value&lt;/P&gt;</description>
    <pubDate>Thu, 08 Sep 2022 03:48:41 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2022-09-08T03:48:41Z</dc:date>
    <item>
      <title>Days between two dates of two observations within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832198#M328914</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I am trying to calculate the gap days between when a medication runs out and the day of a refill within patients, and the total of the gap days for the patient. I have the below data cut example:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Observation&lt;/TD&gt;&lt;TD&gt;Patient&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Days Supply&lt;/TD&gt;&lt;TD&gt;End date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;8/25/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;9/27/2014&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;9/25/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;10/25/2014&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/27/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;11/26/2014&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11/22/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;12/22/2014&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;12/23/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;1/22/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;6/26/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;7/26/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7/23/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;8/22/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8/20/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;9/19/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10/30/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;11/29/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;5/1/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;5/31/2014&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/25/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;8/24/2014&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example, for patient one, I want to calculate the days between 9/27/2014 and 9/25/2014, since that is the last day of medication dispensing in observation 1 and the date they got a refill on observation 2. Same for the gap between observation 2 and 3, 3 and 4, etc. as long as it is within the individual patient. Then I need a running total of all the gap days for each patient, adding each additional gap days within the patient.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So the final output I want should look something like this&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Observation&lt;/TD&gt;&lt;TD&gt;Patient&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Days Supply&lt;/TD&gt;&lt;TD&gt;End date&lt;/TD&gt;&lt;TD&gt;Gap&lt;/TD&gt;&lt;TD&gt;Running gap&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;8/25/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;9/27/2014&lt;/TD&gt;&lt;TD&gt;.&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;1&lt;/TD&gt;&lt;TD&gt;9/25/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;10/25/2014&lt;/TD&gt;&lt;TD&gt;-2&lt;/TD&gt;&lt;TD&gt;-2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/27/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;11/26/2014&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11/22/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;12/22/2014&lt;/TD&gt;&lt;TD&gt;-4&lt;/TD&gt;&lt;TD&gt;-4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;12/23/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;1/22/2015&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;6/26/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;7/26/2018&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7/23/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;8/22/2018&lt;/TD&gt;&lt;TD&gt;-3&lt;/TD&gt;&lt;TD&gt;-3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8/20/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;9/19/2018&lt;/TD&gt;&lt;TD&gt;-2&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10/30/2018&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;11/29/2018&lt;/TD&gt;&lt;TD&gt;41&lt;/TD&gt;&lt;TD&gt;36&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;5/1/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;5/31/2014&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/25/2014&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;8/24/2014&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried getting it to work but can't get the system to restart every time it gets to a new patient and to calculate both the gap between observations and the running gap.&lt;/P&gt;</description>
      <pubDate>Wed, 07 Sep 2022 18:24:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832198#M328914</guid>
      <dc:creator>cmccor</dc:creator>
      <dc:date>2022-09-07T18:24:26Z</dc:date>
    </item>
    <item>
      <title>Re: Days between two dates of two observations within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832215#M328920</link>
      <description>&lt;P&gt;I don't think your RUNNING_GAP variable makes any sense.&amp;nbsp; You cannot teleport the extra pills you got in September back to the days in July where you ran out of pills.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Perhaps looking at it this way is more helpful?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Patient Date :mmddyy. Days_Supply End_date :mmddyy.;
  format date end_date yymmdd10.;
cards;
1 8/25/2014 30 9/27/2014
1 9/25/2014 30 10/25/2014
1 10/27/2014 30 11/26/2014
1 11/22/2014 30 12/22/2014
1 12/23/2014 30 1/22/2015
2 6/26/2018 30 7/26/2018
2 7/23/2018 30 8/22/2018
2 8/20/2018 30 9/19/2018
2 10/30/2018 30 11/29/2018
3 5/1/2014 30 5/31/2014
3 7/25/2014 30 8/24/2014
;

data want;
  set have;
  by patient;
  set have(firstobs=2 keep=date rename=(date=next_fill)) have(obs=1 drop=_all_);
  if first.patient then extra=0;
  if last.patient then next_fill=.;
  else days = next_fill - date ;
  if days &amp;gt; days_supply then gap = days_supply - days;
  else extra+(days_supply-days);
  if first.patient then running_gap=0;
  running_gap + gap;
run;

proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;PRE&gt;                                 Days_                                                        running_
Obs    Patient          Date    Supply      End_date     next_fill    extra    days    gap       gap

  1       1       2014-08-25      30      2014-09-27    2014-09-25      0       31      -1        -1
  2       1       2014-09-25      30      2014-10-25    2014-10-27      0       32      -2        -3
  3       1       2014-10-27      30      2014-11-26    2014-11-22      4       26       .        -3
  4       1       2014-11-22      30      2014-12-22    2014-12-23      4       31      -1        -4
  5       1       2014-12-23      30      2015-01-22             .      4        .       .        -4
  6       2       2018-06-26      30      2018-07-26    2018-07-23      3       27       .         0
  7       2       2018-07-23      30      2018-08-22    2018-08-20      5       28       .         0
  8       2       2018-08-20      30      2018-09-19    2018-10-30      5       71     -41       -41
  9       2       2018-10-30      30      2018-11-29             .      5        .       .       -41
 10       3       2014-05-01      30      2014-05-31    2014-07-25      0       85     -55       -55
 11       3       2014-07-25      30      2014-08-24             .      0        .       .       -55
&lt;/PRE&gt;
&lt;P&gt;You might want to enhance the algorithm to allow the patient to use the extra pills.&amp;nbsp; So the first patient would only have a total of 3 missed days instead of 4 since they could have used some of the four extra pills from the third month to cover the extra day in the fourth month.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Sep 2022 19:04:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832215#M328920</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2022-09-07T19:04:23Z</dc:date>
    </item>
    <item>
      <title>Re: Days between two dates of two observations within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832268#M328944</link>
      <description>&lt;P&gt;If it's just a matter of generating the sample results you posted, then:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Patient Date :mmddyy. Days_Supply End_date :mmddyy.;
  format date end_date yymmdd10.;
cards;
1 8/25/2014 30 9/27/2014
1 9/25/2014 30 10/25/2014
1 10/27/2014 30 11/26/2014
1 11/22/2014 30 12/22/2014
1 12/23/2014 30 1/22/2015
2 6/26/2018 30 7/26/2018
2 7/23/2018 30 8/22/2018
2 8/20/2018 30 9/19/2018
2 10/30/2018 30 11/29/2018
3 5/1/2014 30 5/31/2014
3 7/25/2014 30 8/24/2014
;

data want;
  set have;
  by patient;
  gap = date-lag(end_date);
  running_gap+gap;
  if first.patient then call missing(gap,running_gap);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This will generate a note on the log, saying:&lt;/P&gt;
&lt;PRE&gt;NOTE: Missing values were generated as a result of performing an operation on missing values.
      Each place is given by: (Number of times) at (Line):(Column).
      1 at LLL:cc
&lt;/PRE&gt;
&lt;P&gt;That's because the &lt;EM&gt;&lt;STRONG&gt;lag(end_date)&lt;/STRONG&gt;&lt;/EM&gt;&amp;nbsp;expression will return a missing value for the first observation in HAVE.&amp;nbsp; In turn that will produce the note when the statement&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;  gap = date-lag(end_date);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;tries to subtract that missing value&lt;/P&gt;</description>
      <pubDate>Thu, 08 Sep 2022 03:48:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Days-between-two-dates-of-two-observations-within-a-group/m-p/832268#M328944</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2022-09-08T03:48:41Z</dc:date>
    </item>
  </channel>
</rss>

