<?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 make exception when comparing dates and flag in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964198#M375535</link>
    <description>&lt;P&gt;Quote from myself:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN&gt;Please post example data as a DATA step with DATALINES in the future&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;</description>
    <pubDate>Mon, 14 Apr 2025 08:16:54 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2025-04-14T08:16:54Z</dc:date>
    <item>
      <title>How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/963570#M375370</link>
      <description>&lt;P&gt;Apprectiate your advise&lt;/P&gt;
&lt;P&gt;I have a dataset where i need new flag variable for sequential or combination therapy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="511"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="72"&gt;Patient&lt;/TD&gt;
&lt;TD width="76"&gt;Treatment&lt;/TD&gt;
&lt;TD width="114"&gt;Start&lt;/TD&gt;
&lt;TD width="121"&gt;End&lt;/TD&gt;
&lt;TD width="64"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="64"&gt;Flag&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;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;E1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;10-Apr-17&lt;/TD&gt;
&lt;TD&gt;26-Jun-17&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E1&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;07-Jun-18&lt;/TD&gt;
&lt;TD&gt;08-Aug-18&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&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;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;E2&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;06-Sep-16&lt;/TD&gt;
&lt;TD&gt;20-Oct-16&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E2&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;15-Nov-17&lt;/TD&gt;
&lt;TD&gt;04-Oct-18&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&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;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;E3&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;07-Dec-10&lt;/TD&gt;
&lt;TD&gt;08-Feb-11&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E3&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;06-Sep-16&lt;/TD&gt;
&lt;TD&gt;20-Oct-16&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E3&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;15-Nov-17&lt;/TD&gt;
&lt;TD&gt;04-Oct-18&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&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;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;E4&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;07-Dec-10&lt;/TD&gt;
&lt;TD&gt;08-Feb-11&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E4&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;06-Sep-16&lt;/TD&gt;
&lt;TD&gt;20-Oct-16&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E4&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;15-Nov-17&lt;/TD&gt;
&lt;TD&gt;04-Oct-18&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&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;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;E5&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;27-Feb-18&lt;/TD&gt;
&lt;TD&gt;20-Nov-18&lt;/TD&gt;
&lt;TD&gt;Combi&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E5&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;22-May-18&lt;/TD&gt;
&lt;TD&gt;30-Oct-18&lt;/TD&gt;
&lt;TD&gt;Combi&lt;/TD&gt;
&lt;TD&gt;C&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;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;E7&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;01-Feb-16&lt;/TD&gt;
&lt;TD&gt;28-Apr-16&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E7&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;20-Apr-17&lt;/TD&gt;
&lt;TD&gt;16-May-17&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E7&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;21-Aug-17&lt;/TD&gt;
&lt;TD&gt;02-Jan-19&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E7&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;27-May-19&lt;/TD&gt;
&lt;TD&gt;29-Jul-19&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;A&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;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;E8&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;01-Feb-16&lt;/TD&gt;
&lt;TD&gt;28-Apr-16&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E8&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;20-Apr-17&lt;/TD&gt;
&lt;TD&gt;16-May-17&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E8&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;21-Aug-17&lt;/TD&gt;
&lt;TD&gt;02-Jan-19&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E8&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;27-May-19&lt;/TD&gt;
&lt;TD&gt;29-Jul-19&lt;/TD&gt;
&lt;TD&gt;Seq&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;treatment can be sequential (prev trt has ended before start of next trt)&lt;BR /&gt;treatment can be combination (prev trt has not ended before start of next trt)&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;If the patient has an end date for one prior therapy that occurs on or before the start date of another prior therapy, &lt;BR /&gt;then assign A or B depending on which starts first&lt;BR /&gt;Ex: scenarios 1,2,3 and 4&lt;/P&gt;
&lt;P&gt;If the patient doesn’t have an end date for a prior therapy that occurs on or before the start date of another prior therapy, &lt;BR /&gt;then assign C.&lt;BR /&gt;Ex: scenario 5&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;Also, For scenarios 3 and 4,&lt;BR /&gt;we take the min (start) and max (end) per treatment for comparing.&lt;BR /&gt;For Ex: Patient E3, A trt has min (start) as 07-Dec-10 and max (end) as 20-Oct-16 which has ended before min(start) of B (15-Nov-17)&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;However scenarios 5 and 6 we need to make few exceptions.&lt;/P&gt;
&lt;P&gt;when we take the min (start) and max (end) per treatment, they get flagged as combination although they are sequential&lt;BR /&gt;For Ex: Patient E7, A trt has min (start) as 01-Feb-16 and max (end) as 29-Jul-19.&lt;BR /&gt;So when code compares Trt A max(end) 29-Jul-19 with Trt B min(start) 21-Aug-17, it treats as A has not ended before start of B and hence flags as Combination.&lt;/P&gt;
&lt;P&gt;Similar for Patient E8.&lt;/P&gt;
&lt;P&gt;How to tell the program to make an exception and not count this as combination?&lt;BR /&gt;It should be treated as sequential&lt;/P&gt;
&lt;P&gt;Similar exceptions should be made for &lt;BR /&gt;A B B A, A B B A A etc&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 07 Apr 2025 10:18:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/963570#M375370</guid>
      <dc:creator>anandrc</dc:creator>
      <dc:date>2025-04-07T10:18:37Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/963631#M375388</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines dlm='09'x dsd truncover;
input
  patient $
  treatment $
  start :date9.
  end :date9.
;
format start end date9.;
datalines;
E1	A	10-Apr-17	26-Jun-17	Seq	A
E1	B	07-Jun-18	08-Aug-18	Seq	A
E2	B	06-Sep-16	20-Oct-16	Seq	B
E2	A	15-Nov-17	04-Oct-18	Seq	B
E3	A	07-Dec-10	08-Feb-11	Seq	A
E3	A	06-Sep-16	20-Oct-16	Seq	A
E3	B	15-Nov-17	04-Oct-18	Seq	A
E4	B	07-Dec-10	08-Feb-11	Seq	B
E4	B	06-Sep-16	20-Oct-16	Seq	B
E4	A	15-Nov-17	04-Oct-18	Seq	B
E5	A	27-Feb-18	20-Nov-18	Combi	C
E5	B	22-May-18	30-Oct-18	Combi	C
E7	A	01-Feb-16	28-Apr-16	Seq	A
E7	A	20-Apr-17	16-May-17	Seq	A
E7	B	21-Aug-17	02-Jan-19	Seq	A
E7	A	27-May-19	29-Jul-19	Seq	A
E8	B	01-Feb-16	28-Apr-16	Seq	B
E8	B	20-Apr-17	16-May-17	Seq	B
E8	A	21-Aug-17	02-Jan-19	Seq	B
E8	B	27-May-19	29-Jul-19	Seq	B
;

data want;
if 0 then set have;
flag1 = "Seq  ";
do until (last.patient);
  set have;
  by patient;
  if first.patient then flag2 = treatment;
  if
    not first.patient
    and treatment ne lag(treatment)
    and start lt lag(end)
  then do;
    flag1 = "Combi";
    flag2 = "C";
  end;
end;
do until (last.patient);
  set have;
  by patient;
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Gives the same result that you show in your post.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please post example data as a DATA step with DATALINES in the future, like I do here.&lt;/P&gt;</description>
      <pubDate>Mon, 07 Apr 2025 20:07:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/963631#M375388</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2025-04-07T20:07:33Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/963669#M375391</link>
      <description>&lt;P&gt;If your actual data are more complicated than this, e.g., many kinds of treatments or other time-varying exposures, or if you need to assess length of overlap, gaps, adherence, etc., I would recommend you convert this into a 'counting process' format wherein each row represents a period of time during which the exposure profile of a patient is static.&amp;nbsp; I use a macro for this, but there are various ways out there to do this.&amp;nbsp; Having data in this format will make it very simple to answer your questions about combination vs. sequential therapy.&amp;nbsp; It may be overkill if you really just have two drugs and simply want to know whether there was ever any overlap, of course.&amp;nbsp; Here's an example, using&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;'s input dataset followed by conversion into an input dataset for the macro.&amp;nbsp; Note that the startdate/enddate variables that are being created in this case are just the earliest start and latest end for each patient, but that's not required - they should instead be the start / end of follow-up for the person if that information is available.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc datasets lib=work memtype=data nolist nodetails kill; run; quit;

data have;
infile datalines dlm='09'x dsd truncover;
input
  patient $
  treatment $
  start :date9.
  end :date9.
;
format start end date9.;
datalines;
E1	A	10-Apr-17	26-Jun-17	Seq	A
E1	B	07-Jun-18	08-Aug-18	Seq	A
E2	B	06-Sep-16	20-Oct-16	Seq	B
E2	A	15-Nov-17	04-Oct-18	Seq	B
E3	A	07-Dec-10	08-Feb-11	Seq	A
E3	A	06-Sep-16	20-Oct-16	Seq	A
E3	B	15-Nov-17	04-Oct-18	Seq	A
E4	B	07-Dec-10	08-Feb-11	Seq	B
E4	B	06-Sep-16	20-Oct-16	Seq	B
E4	A	15-Nov-17	04-Oct-18	Seq	B
E5	A	27-Feb-18	20-Nov-18	Combi	C
E5	B	22-May-18	30-Oct-18	Combi	C
E7	A	01-Feb-16	28-Apr-16	Seq	A
E7	A	20-Apr-17	16-May-17	Seq	A
E7	B	21-Aug-17	02-Jan-19	Seq	A
E7	A	27-May-19	29-Jul-19	Seq	A
E8	B	01-Feb-16	28-Apr-16	Seq	B
E8	B	20-Apr-17	16-May-17	Seq	B
E8	A	21-Aug-17	02-Jan-19	Seq	B
E8	B	27-May-19	29-Jul-19	Seq	B
;
run;

proc sql;
create table forCP as
select a.patient, a.startdate, a.enddate, 
b.treatment as event, b.start as edate length=4 format=date9.,
b.end-b.start as days length=4
from
	(select patient, min(start) as startdate length=4 format=date9.,
	max(end) as enddate length=4 format=date9. from have group by patient) A
	left join
	have B
	on a.patient=b.patient
order by a.patient, edate, event;
quit;

%include "/path/to/macro/cp.sas";

%cp(
	forCP,
	ptid=patient
	);
	
title 'first 50 obs of output data';
proc print data=cp (obs=50) width=min; run;
title;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Output from proc print looks like this -- combination therapy, in this case, are simply rows where both A and B are 1.&amp;nbsp; Length of the window is given by LEN and winstart/winend are the bounds of that window.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="quickbluefish_0-1744107236200.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/105997i7FC7C28F671A3EA5/image-size/medium?v=v2&amp;amp;px=400" role="button" title="quickbluefish_0-1744107236200.png" alt="quickbluefish_0-1744107236200.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 08 Apr 2025 10:14:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/963669#M375391</guid>
      <dc:creator>quickbluefish</dc:creator>
      <dc:date>2025-04-08T10:14:06Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964194#M375533</link>
      <description>&lt;P&gt;Appreciate the response.&lt;/P&gt;
&lt;P&gt;In this instance, i do have only 2 treatment but looks like have to introduce a 30 day overlap. Can i please know how to access cp.sas program which creates the winstart and winend etc&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;How do i ignore the first line of treatment as its more than 30 days overlap between the end of first treatment and start of second treatment and only consider second A treatment for flagging purpose&lt;/P&gt;
&lt;P&gt;I have an instance for example E10 patient listed below -&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="450"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;Patient&lt;/TD&gt;
&lt;TD width="76"&gt;Treatment&lt;/TD&gt;
&lt;TD width="142"&gt;Start&lt;/TD&gt;
&lt;TD width="148"&gt;End&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E10&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;13-Jul-15&lt;/TD&gt;
&lt;TD&gt;21-Aug-15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E10&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;27-Apr-21&lt;/TD&gt;
&lt;TD&gt;27-Apr-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E10&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;27-Apr-21&lt;/TD&gt;
&lt;TD&gt;27-Sep-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also,&amp;nbsp;introduce a rule that trumps everything when it&amp;nbsp; find combination first like when the start dates match.&lt;BR /&gt;For Example for E9&lt;/P&gt;
&lt;TABLE width="450"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;Patient&lt;/TD&gt;
&lt;TD width="76"&gt;Treatment&lt;/TD&gt;
&lt;TD width="142"&gt;Start&lt;/TD&gt;
&lt;TD width="148"&gt;End&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E9&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E9&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Mon, 14 Apr 2025 06:15:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964194#M375533</guid>
      <dc:creator>anandrc</dc:creator>
      <dc:date>2025-04-14T06:15:05Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964195#M375534</link>
      <description>&lt;P&gt;Appreciate the response. Very useful.&lt;/P&gt;
&lt;P&gt;Rules are assiging the correct flag, but do have couple of scenarios to consider. Apologies, did not foresee these exceptions&lt;/P&gt;
&lt;P&gt;For ex, in the below scenario, current code flags it as A, but when the start dates match,&amp;nbsp;We need put a rule before that trumps it to find combination first and Flag it a C&lt;/P&gt;
&lt;TABLE width="450"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;Patient&lt;/TD&gt;
&lt;TD width="76"&gt;Treatment&lt;/TD&gt;
&lt;TD width="142"&gt;Start&lt;/TD&gt;
&lt;TD width="148"&gt;End&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E9&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E9&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;TD&gt;01-Jan-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For second scenario,&lt;/P&gt;
&lt;P&gt;looks like i have to introduce a 30 day overlap.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the ex below,&amp;nbsp;I need to ignore the first line of treatement as the overlap is more than 30 days between end of first treatment and start of second treatment and only consider second A treatment for flagging purpose. Current code flags it as A but if we ignore the first line of treatment, as start dates match it should be combination C.&lt;/P&gt;
&lt;TABLE width="450"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;Patient&lt;/TD&gt;
&lt;TD width="76"&gt;Treatment&lt;/TD&gt;
&lt;TD width="142"&gt;Start&lt;/TD&gt;
&lt;TD width="148"&gt;End&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E10&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;13-Jul-15&lt;/TD&gt;
&lt;TD&gt;21-Aug-15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E10&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;27-Apr-21&lt;/TD&gt;
&lt;TD&gt;27-Apr-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;E10&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;27-Apr-21&lt;/TD&gt;
&lt;TD&gt;27-Sep-21&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 14 Apr 2025 06:27:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964195#M375534</guid>
      <dc:creator>anandrc</dc:creator>
      <dc:date>2025-04-14T06:27:13Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964198#M375535</link>
      <description>&lt;P&gt;Quote from myself:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN&gt;Please post example data as a DATA step with DATALINES in the future&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;</description>
      <pubDate>Mon, 14 Apr 2025 08:16:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964198#M375535</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2025-04-14T08:16:54Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964199#M375536</link>
      <description>&lt;P&gt;Apologies.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data have;&lt;BR /&gt;infile datalines dlm='09'x dsd truncover;&lt;BR /&gt;input&lt;BR /&gt;patient $&lt;BR /&gt;treatment $&lt;BR /&gt;start :date9.&lt;BR /&gt;end :date9.&lt;BR /&gt;;&lt;BR /&gt;format start end date9.;&lt;BR /&gt;datalines;&lt;BR /&gt;E1 A 10-Apr-17 26-Jun-17 Seq A&lt;BR /&gt;E1 B 07-Jun-18 08-Aug-18 Seq A&lt;BR /&gt;E2 B 06-Sep-16 20-Oct-16 Seq B&lt;BR /&gt;E2 A 15-Nov-17 04-Oct-18 Seq B&lt;BR /&gt;E3 A 07-Dec-10 08-Feb-11 Seq A&lt;BR /&gt;E3 A 06-Sep-16 20-Oct-16 Seq A&lt;BR /&gt;E3 B 15-Nov-17 04-Oct-18 Seq A&lt;BR /&gt;E4 B 07-Dec-10 08-Feb-11 Seq B&lt;BR /&gt;E4 B 06-Sep-16 20-Oct-16 Seq B&lt;BR /&gt;E4 A 15-Nov-17 04-Oct-18 Seq B&lt;BR /&gt;E5 A 27-Feb-18 20-Nov-18 Combi C&lt;BR /&gt;E5 B 22-May-18 30-Oct-18 Combi C&lt;BR /&gt;E7 A 01-Feb-16 28-Apr-16 Seq A&lt;BR /&gt;E7 A 20-Apr-17 16-May-17 Seq A&lt;BR /&gt;E7 B 21-Aug-17 02-Jan-19 Seq A&lt;BR /&gt;E7 A 27-May-19 29-Jul-19 Seq A&lt;BR /&gt;E8 B 01-Feb-16 28-Apr-16 Seq B&lt;BR /&gt;E8 B 20-Apr-17 16-May-17 Seq B&lt;BR /&gt;E8 A 21-Aug-17 02-Jan-19 Seq B&lt;BR /&gt;E8 B 27-May-19 29-Jul-19 Seq B&lt;BR /&gt;E9 A 01-Jan-21 01-Jan-21 Combi C&lt;BR /&gt;E9 B 01-Jan-21 01-Jan-21 Combi C&lt;BR /&gt;E10 A 13-Jul-15 21-Aug-15 Combi C&lt;BR /&gt;E10 A 27-Apr-21 27-Apr-21 Combi C&lt;BR /&gt;E10 B 27-Apr-21 27-Sep-21 Combi C&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Apr 2025 09:09:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964199#M375536</guid>
      <dc:creator>anandrc</dc:creator>
      <dc:date>2025-04-14T09:09:00Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964263#M375552</link>
      <description>&lt;P&gt;See if this does it:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
if 0 then set have;
flag1 = "Seq  ";
do until (last.patient);
  set have;
  by patient notsorted;
  if first.patient then flag2 = treatment;
  if
    not first.patient
    and treatment ne lag(treatment)
    and (start lt lag(end) or start eq lag(start))
  then do;
    flag1 = "Combi";
    flag2 = "C";
  end;
end;
do until (last.patient);
  set have;
  by patient notsorted;
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If not, provide an example where it fails.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Apr 2025 19:56:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964263#M375552</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2025-04-14T19:56:52Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964272#M375556</link>
      <description>&lt;P&gt;This is the counting process macro I'm using:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/Jeremy-Smith5/CEP-public/blob/main/SAS/cp.sas" target="_blank"&gt;https://github.com/Jeremy-Smith5/CEP-public/blob/main/SAS/cp.sas&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;...it's old, and a bit of a Rube Goldberg contraption, but works as long as you follow the instructions.&amp;nbsp; The key thing is that the things you provide in the 'EVENT' variable must themselves be named in such a way that they could be valid (version 7) variable names.&amp;nbsp; In other words, if your unique events are: DrugA, DrugB, DrugC, HospStay, Pneumonia - those are fine as names.&amp;nbsp; But Drug A, Hospital Stay, etc. will not work with the current set up.&amp;nbsp; The counting process data format, however you choose to go about creating it, is transformative for longitudinal work, esp. pharmepi, in my view.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Apr 2025 22:32:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964272#M375556</guid>
      <dc:creator>quickbluefish</dc:creator>
      <dc:date>2025-04-14T22:32:58Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964278#M375558</link>
      <description>&lt;P&gt;You can set up a HISTORY array (one element per date from the earliest possible to latest possible date).&amp;nbsp; Pass through each patient twice.&amp;nbsp; Initialize each patient to class='Seq&amp;nbsp; '&amp;nbsp; and flag=treatment of the first record.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;During the first pass, update the history array.&amp;nbsp; If a date is encountered that has more than one treatment, set class to 'COMBI' and flag to 'C', ... and stop monitoring dates - you won't be going back from Combi to Seq.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;During the second pass, do nothing but permit the observations to be output, using the CLASS and FLAG values retained from the first pass:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines ;;
input
  patient $2.  treatment :$1.  start :date9.  end :date9.   
     _class :$5.   _flag :$1. ;
format start end date9.;
datalines;
E1 A 10Apr2017 26Jun2017 Seq A
E1 B 07Jun2018 08Aug2018 Seq A
E2 B 06Sep2016 20Oct2016 Seq B
E2 A 15Nov2017 04Oct2018 Seq B
E3 A 07Dec2010 08Feb2011 Seq A
E3 A 06Sep2016 20Oct2016 Seq A
E3 B 15Nov2017 04Oct2018 Seq A
E4 B 07Dec2010 08Feb2011 Seq B
E4 B 06Sep2016 20Oct2016 Seq B
E4 A 15Nov2017 04Oct2018 Seq B
E5 A 27Feb2018 20Nov2018 Combi C
E5 B 22May2018 30Oct2018 Combi C
E7 A 01Feb2016 28Apr2016 Seq A
E7 A 20Apr2017 16May2017 Seq A
E7 B 21Aug2017 02Jan2019 Seq A
E7 A 27May2019 29Jul2019 Seq A
E8 B 01Feb2016 28Apr2016 Seq B
E8 B 20Apr2017 16May2017 Seq B
E8 A 21Aug2017 02Jan2019 Seq B
E8 B 27May2019 29Jul2019 Seq B
run;

%let beg=01jan2010;
%let end=31dec2019;
data want (drop=d);
  set have (in=firstpass) have (in=secondpass);
  by patient;

  retain class '     ' Flag ' ' ;
  array history {%sysevalf("&amp;amp;beg"d):%sysevalf("&amp;amp;end"d)}  _temporary_;

  if first.patient then do;
    call missing(of history{*});
    class='Seq  ';
    flag=treatment;
  end;

  if firstpass=1 and class='Seq' then do d=start to end while (class='Seq');
    history{d}+1;
    if history{d}&amp;gt;1 then do;
      class='Combi';
      flag='C';
    end;
  end;
  if secondpass;
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>Wed, 23 Apr 2025 14:04:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964278#M375558</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2025-04-23T14:04:38Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964849#M375725</link>
      <description>Thankyou for the suggestion. I will try this for treatments with more than 3+.&lt;BR /&gt;Really appreciate</description>
      <pubDate>Tue, 22 Apr 2025 17:13:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964849#M375725</guid>
      <dc:creator>anandrc</dc:creator>
      <dc:date>2025-04-22T17:13:56Z</dc:date>
    </item>
    <item>
      <title>Re: How do i make exception when comparing dates and flag</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964850#M375726</link>
      <description>Thankyou for the suggestion. I will save this and try this solution</description>
      <pubDate>Tue, 22 Apr 2025 17:15:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-i-make-exception-when-comparing-dates-and-flag/m-p/964850#M375726</guid>
      <dc:creator>anandrc</dc:creator>
      <dc:date>2025-04-22T17:15:02Z</dc:date>
    </item>
  </channel>
</rss>

