<?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 to create a variable to represent the months of overlapping drug use in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686593#M208385</link>
    <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let me take a look at the new data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;</description>
    <pubDate>Fri, 25 Sep 2020 02:16:21 GMT</pubDate>
    <dc:creator>jimbarbour</dc:creator>
    <dc:date>2020-09-25T02:16:21Z</dc:date>
    <item>
      <title>How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685294#M207825</link>
      <description>&lt;P&gt;Hi SAS Pros,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am having this dataset. My goal is to know the dates that a patient used drug B while using A, which is the overlapping use, among all the prescriptions from 1/1/2017 to 4/30/2018.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For the overlapping use dates, I don't need to know what exactly they are.&lt;/LI&gt;
&lt;LI&gt;What I need to generate is the months of those dates with overlapping use of drug A and B, which are from 2017-01 to 2018-04, any overlapping use happened after 2018-04 won't be considered as an overlap.&lt;/LI&gt;
&lt;LI&gt;For example, the months with overlapping use for patient 1 are 2017-01,&amp;nbsp;2017-02,&amp;nbsp;2017-04,&amp;nbsp;2017-05,&amp;nbsp;2017-06, 2018-01, 2018-02, 2018-03, and 2018-04&lt;/LI&gt;
&lt;LI&gt;Right now, I have two definition of overlapping use because the clinical recommendation of use for drug A and B.&lt;/LI&gt;
&lt;LI&gt;The definition 1 of having drug B while using A (overlapping use) is that a patient used them on the same day (e.g. just like data showed below in the first and second prescriptions for patient 1).&lt;/LI&gt;
&lt;LI&gt;What if the definition (definition 2) of overlapping use is 3 days apart, that is, the start_taking_date is &amp;lt;= 3 days after last_taking_date of previous prescription of different drug.&lt;/LI&gt;
&lt;/UL&gt;
&lt;TABLE width="478"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;ID&lt;/TD&gt;
&lt;TD width="103"&gt;No_of_Prescription&lt;/TD&gt;
&lt;TD width="123"&gt;Start_taking_Date&lt;/TD&gt;
&lt;TD width="79"&gt;Day_Supply&lt;/TD&gt;
&lt;TD width="110"&gt;last_taking_date&lt;/TD&gt;
&lt;TD width="35"&gt;drug&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;1&lt;/TD&gt;
&lt;TD width="123"&gt;1/2/2017&lt;/TD&gt;
&lt;TD width="79"&gt;3&lt;/TD&gt;
&lt;TD width="110"&gt;1/4/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;2&lt;/TD&gt;
&lt;TD width="123"&gt;1/4/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;2/2/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;3&lt;/TD&gt;
&lt;TD width="123"&gt;1/4/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;2/2/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;4&lt;/TD&gt;
&lt;TD width="123"&gt;1/4/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;2/2/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;5&lt;/TD&gt;
&lt;TD width="123"&gt;4/7/2017&lt;/TD&gt;
&lt;TD width="79"&gt;10&lt;/TD&gt;
&lt;TD width="110"&gt;4/16/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;6&lt;/TD&gt;
&lt;TD width="123"&gt;4/7/2017&lt;/TD&gt;
&lt;TD width="79"&gt;10&lt;/TD&gt;
&lt;TD width="110"&gt;4/16/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;7&lt;/TD&gt;
&lt;TD width="123"&gt;4/14/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;5/13/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;8&lt;/TD&gt;
&lt;TD width="123"&gt;4/17/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;5/16/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;9&lt;/TD&gt;
&lt;TD width="123"&gt;5/9/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;6/7/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;10&lt;/TD&gt;
&lt;TD width="123"&gt;5/16/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;6/14/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;11&lt;/TD&gt;
&lt;TD width="123"&gt;1/17/2018&lt;/TD&gt;
&lt;TD width="79"&gt;60&lt;/TD&gt;
&lt;TD width="110"&gt;3/17/2018&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;12&lt;/TD&gt;
&lt;TD width="123"&gt;1/23/2018&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;2/21/2018&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;13&lt;/TD&gt;
&lt;TD width="123"&gt;2/13/2018&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;3/14/2018&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;14&lt;/TD&gt;
&lt;TD width="123"&gt;2/15/2018&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;3/16/2018&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;15&lt;/TD&gt;
&lt;TD width="123"&gt;3/14/2018&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;4/12/2018&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;16&lt;/TD&gt;
&lt;TD width="123"&gt;3/14/2018&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;4/12/2018&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;1&lt;/TD&gt;
&lt;TD width="103"&gt;17&lt;/TD&gt;
&lt;TD width="123"&gt;4/1/2018&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;4/30/2018&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;3&lt;/TD&gt;
&lt;TD width="123"&gt;2/9/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;3/10/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;4&lt;/TD&gt;
&lt;TD width="123"&gt;2/9/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;3/10/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;5&lt;/TD&gt;
&lt;TD width="123"&gt;2/16/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;3/17/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;6&lt;/TD&gt;
&lt;TD width="123"&gt;3/13/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;4/11/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;7&lt;/TD&gt;
&lt;TD width="123"&gt;3/13/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;4/11/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;8&lt;/TD&gt;
&lt;TD width="123"&gt;3/17/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;4/15/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;9&lt;/TD&gt;
&lt;TD width="123"&gt;4/10/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;5/9/2017&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;10&lt;/TD&gt;
&lt;TD width="123"&gt;4/15/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;5/14/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;11&lt;/TD&gt;
&lt;TD width="123"&gt;5/14/2017&lt;/TD&gt;
&lt;TD width="79"&gt;352&lt;/TD&gt;
&lt;TD width="110"&gt;4/30/2018&lt;/TD&gt;
&lt;TD width="35"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="28"&gt;2&lt;/TD&gt;
&lt;TD width="103"&gt;12&lt;/TD&gt;
&lt;TD width="123"&gt;5/14/2017&lt;/TD&gt;
&lt;TD width="79"&gt;30&lt;/TD&gt;
&lt;TD width="110"&gt;6/12/2017&lt;/TD&gt;
&lt;TD width="35"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know this project is a little complicated. I appreciate any help with it! (I have asked a similar question before, but this one is different, if you happened to see my previous post, please ignore the previous ones.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2020 00:59:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685294#M207825</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-21T00:59:50Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685312#M207834</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm not sure if I completely understood all of your requirements, but I have written a program that you should be able to adjust to fit as your needs dictate.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The program sets the "Both" variable to "1" for any month where both drug A and drug B were taken any time during the month.&amp;nbsp; If either drug A and drug B were not taken any time during the month, the "Both" variable is set to "0."&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Details of the program:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;A start of period and end of period macro variable are set.&amp;nbsp; I used 01JAN2017 as the start of the period of interest and 30APR2018 as the end of the period of interest.&amp;nbsp; Throughout the program, I used the first day of the month for whatever date was under consideration and the last day of the month for any end dates.&lt;/LI&gt;
&lt;LI&gt;A simple DATA step reads the input.&amp;nbsp; I just cut and paste the data from your original post into this DATA step.&lt;/LI&gt;
&lt;LI&gt;A second DATA step builds two hash tables, one for drug A and one for drug B.&amp;nbsp; For each ID, every month in the data is evaluated from start to end, and an entry with a key of ID and Drug_Date is written to the respective hash table if a particular drug was taken any time during the month.&amp;nbsp; Basically each has table contains a record for each ID for each month a particular drug was taken.&lt;/LI&gt;
&lt;LI&gt;In the second data step, after the hash tables are loaded, each month in the period of interest is examined for each ID.&amp;nbsp; If an entry is found in the drug A &lt;EM&gt;and&lt;/EM&gt;&amp;nbsp;in the drug B hash table for an ID for a particular month, then the "Both" variable is set to "1" otherwise the variable is set to "0".&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The code is below, and, following the code, are the results.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%LET	Start_Of_Period		=	'01JAN2017'd;
%LET	End_Of_Period		=	'30APR2018'd;

DATA	Rx_Dates;
	INFILE	Datalines4	
		DLM					=	'09'x
		FIRSTOBS			=	2
		DSD
		;

	INPUT
		ID					$
		No_of_Prescription	$
		Start_Taking_Date	:	ANYDTDTE10.
		Day_Supply			$
		Last_Taking_Date	:	ANYDTDTE10.
		Drug				$
		;

	FORMAT	Start_Taking_Date	MMDDYYS10.;
	FORMAT	Last_Taking_Date	MMDDYYS10.;

DATALINES4;
ID	No_of_Prescription	Start_Taking_Date	Day_Supply	Last_Taking_Date	Drug
1	1	1/2/2017	3	1/4/2017	A
1	2	1/4/2017	30	2/2/2017	B
1	3	1/4/2017	30	2/2/2017	A
1	4	1/4/2017	30	2/2/2017	A
1	5	4/7/2017	10	4/16/2017	B
1	6	4/7/2017	10	4/16/2017	A
1	7	4/14/2017	30	5/13/2017	A
1	8	4/17/2017	30	5/16/2017	A
1	9	5/9/2017	30	6/7/2017	B
1	10	5/16/2017	30	6/14/2017	A
1	11	1/17/2018	60	3/17/2018	B
1	12	1/23/2018	30	2/21/2018	A
1	13	2/13/2018	30	3/14/2018	A
1	14	2/15/2018	30	3/16/2018	B
1	15	3/14/2018	30	4/12/2018	A
1	16	3/14/2018	30	4/12/2018	A
1	17	4/1/2018	30	4/30/2018	B
2	3	2/9/2017	30	3/10/2017	B
2	4	2/9/2017	30	3/10/2017	B
2	5	2/16/2017	30	3/17/2017	A
2	6	3/13/2017	30	4/11/2017	B
2	7	3/13/2017	30	4/11/2017	B
2	8	3/17/2017	30	4/15/2017	A
2	9	4/10/2017	30	5/9/2017	B
2	10	4/15/2017	30	5/14/2017	A
2	11	5/14/2017	352	4/30/2018	B
2	12	5/14/2017	30	6/12/2017	A
;;;;
RUN;

**------------------------------------------------------------------------------**;

DATA	Rx_Period_Evaluated;
	KEEP	ID	Drug_Date	Both;
	LENGTH	ID						$8;
	LENGTH	Drug_Date				8.;
	FORMAT	Drug_Date				MMDDYYS10.;
	LENGTH	End_of_Taking			8.;
	FORMAT	End_of_Taking			MMDDYYS10.;
	LENGTH	Start_of_Period			8.;
	FORMAT	Start_of_Period			MMDDYYS10.;
	LENGTH	End_of_Period			8.;
	FORMAT	End_of_Period			MMDDYYS10.;
	LENGTH	Work_ID					8.;
	RETAIN	Max_ID					0;

	IF	_N_							=	1							THEN
		DO;
			CALL	MISSING(Drug_Date);
			DECLARE	HASH	Hsh_A_Dates();
			Hsh_A_Dates.DefineKey('ID', 'Drug_Date');
			Hsh_A_Dates.DefineDone();
			CALL	MISSING(Drug_Date);
			DECLARE	HASH	Hsh_B_Dates();
			Hsh_B_Dates.DefineKey('ID', 'Drug_Date');
			Hsh_B_Dates.DefineDone();
		END;

	**	Load drug A hash table.		**;
	DO	WHILE(NOT	End_Of_A);
		SET	Rx_Dates	
			END						=	End_Of_A;
			WHERE	Drug			=	'A';
		IF	INPUT(ID, 3.)			&amp;gt;	Max_ID	THEN
			Max_ID					=	INPUT(ID, 3.);
		Drug_Date					=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking				=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
		DO	WHILE(Drug_Date			&amp;lt;=	End_of_Taking);
			_RC_A					=	Hsh_A_Dates.ADD();
			Drug_Date				=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	**	Load drug B hash table.		**;
	DO	WHILE(NOT	End_Of_B);
		SET	Rx_Dates	
			END						=	End_Of_B;
			WHERE	Drug			=	'B';
		IF	INPUT(ID, 3.)			&amp;gt;	Max_ID	THEN
			Max_ID					=	INPUT(ID, 3.);
		Drug_Date					=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking				=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
		DO	WHILE(Drug_Date			&amp;lt;=	End_of_Taking);
			_RC_B					=	Hsh_B_Dates.ADD();
			Drug_Date				=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	Start_Of_Period					=	INTNX('MONTH', &amp;amp;Start_Of_Period, 0);
	End_Of_Period					=	INTNX('MONTH', &amp;amp;End_Of_Period, 1) - 1;

	DO	Work_ID						=	1	TO	Max_ID;
		ID							=	STRIP(PUT(Work_ID, 3.));
		Drug_Date					=	Start_Of_Period;
		Iteration					=	0;
		DO	WHILE(Drug_Date			&amp;lt;=	End_Of_Period);
			Iteration				+	1;
			IF	Hsh_A_Dates.FIND()	=	0	AND
				Hsh_B_Dates.FIND()	=	0	THEN
				DO;
					Both			=	1;
				END;
			ELSE
				DO;
					Both			=	0;
				END;
			OUTPUT;
			Drug_Date				=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	STOP;
RUN;

**------------------------------------------------------------------------------**;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Results:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1600669366710.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49570iB5925BEC664EEABD/image-size/large?v=v2&amp;amp;px=999" role="button" title="jimbarbour_0-1600669366710.png" alt="jimbarbour_0-1600669366710.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2020 06:51:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685312#M207834</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-21T06:51:24Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685314#M207835</link>
      <description>&lt;P&gt;You have not show the desired output&amp;nbsp; format;&lt;/P&gt;
&lt;P&gt;I have run next code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile cards dlm='09'x;
  informat Start_taking_Date last_taking_date mmddyy. ;
  input ID
        No_of_Prescription
        Start_taking_Date	
		Day_Supply	
		last_taking_date	
		drug $;
cards;
1	1	1/2/2017	3	1/4/2017	A
1	2	1/4/2017	30	2/2/2017	B
1	3	1/4/2017	30	2/2/2017	A
1	4	1/4/2017	30	2/2/2017	A
1	5	4/7/2017	10	4/16/2017	B
1	6	4/7/2017	10	4/16/2017	A
1	7	4/14/2017	30	5/13/2017	A
1	8	4/17/2017	30	5/16/2017	A
1	9	5/9/2017	30	6/7/2017	B
1	10	5/16/2017	30	6/14/2017	A
1	11	1/17/2018	60	3/17/2018	B
1	12	1/23/2018	30	2/21/2018	A
1	13	2/13/2018	30	3/14/2018	A
1	14	2/15/2018	30	3/16/2018	B
1	15	3/14/2018	30	4/12/2018	A
1	16	3/14/2018	30	4/12/2018	A
1	17	4/1/2018	30	4/30/2018	B
2	3	2/9/2017	30	3/10/2017	B
2	4	2/9/2017	30	3/10/2017	B
2	5	2/16/2017	30	3/17/2017	A
2	6	3/13/2017	30	4/11/2017	B
2	7	3/13/2017	30	4/11/2017	B
2	8	3/17/2017	30	4/15/2017	A
2	9	4/10/2017	30	5/9/2017	B
2	10	4/15/2017	30	5/14/2017	A
2	11	5/14/2017	352	4/30/2018	B
2	12	5/14/2017	30	6/12/2017	A
; run;

data have_A have_B;
 drop Start_taking_Date last_taking_date;
 set have;
     do day = Start_taking_Date to last_taking_date; end;
     if drug = 'A' then output have_A;
     else output have_B;
run;

proc sort data=have_A; by id day; run;
proc sort data=have_B; by id day; run;

data want;
merge have_A (in=inA rename=(day_supply=daysupA drug=drugA))
      have_B (in=inB rename=(day_supply=daysupB drug=drugB));
   by id day;        
   if inA and inB;
   drugs = catx('+',drugA,drugB);
   drop drugA drugB;
   format day date9.;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;and got next results:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Shmuel_0-1600670233542.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49571i20C4CA73342041CE/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Shmuel_0-1600670233542.png" alt="Shmuel_0-1600670233542.png" /&gt;&lt;/span&gt;&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;</description>
      <pubDate>Mon, 21 Sep 2020 06:37:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685314#M207835</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2020-09-21T06:37:31Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685320#M207839</link>
      <description>&lt;P&gt;I think you can do it something like this. First, create a table of overlaps:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
  create table overlap as select distinct
    A.ID,
    max(A.Start_taking_Date,B.Start_taking_Date) as start format=date9.,
    min(A.last_taking_date,B.last_taking_date) as end format=date9.
    from
      have A join
      have B on A.ID=B.ID
    where A.drug='A'
      and B.drug='B'
    having start&amp;lt;=end
    order by 1,2,3
    ;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Then use a data step to get the wanted values (the LAST_DATE macro variable is because you do not want anything after 2018-04):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let last_date='01may2018'd;
data want;
  set overlap;
  by ID;
  if first.ID or month&amp;lt;intnx('month',start,0) then month=intnx('month',start,0);
  do while(month&amp;lt;=min(intnx('month',end,0),&amp;amp;last_date));
    output;
    month=intnx('month',month,1);
    end;
  retain month;
  keep id month;
  format month yymmd7.;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you need the second definition of overlaps, it can be done like this. First, change the HAVING clause in the SQL:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
  create table overlap as select distinct
    A.ID,
    max(A.Start_taking_Date,B.Start_taking_Date) as start format=date9.,
    min(A.last_taking_date,B.last_taking_date) as end format=date9.
    from
      have A join
      have B on A.ID=B.ID
    where A.drug='A'
      and B.drug='B'
    having start&amp;lt;=end+3
    order by 1,2,3
    ;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And then the data step, correct if START is after END:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let last_date='01may2018'd;
data want;
  set overlap;
  by ID;&lt;BR /&gt;  if start&amp;gt;end then&lt;BR /&gt;    start=start-3;
  if first.ID or month&amp;lt;intnx('month',start,0) then month=intnx('month',start,0);
  do while(month&amp;lt;=min(intnx('month',end,0),&amp;amp;last_date));
    output;
    month=intnx('month',month,1);
    end;
  retain month;
  keep id month;
  format month yymmd7.;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2020 07:50:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685320#M207839</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2020-09-21T07:50:37Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685507#M207912</link>
      <description>&lt;P&gt;Using an array :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID No_of_Prescription Start_Date :mmddyy10. Day_Supply last_date :mmddyy10. drug $;
datalines;
1     1   1/2/2017    3   1/4/2017    A
1     2   1/4/2017    30  2/2/2017    B
1     3   1/4/2017    30  2/2/2017    A
1     4   1/4/2017    30  2/2/2017    A
1     5   4/7/2017    10  4/16/2017   B
1     6   4/7/2017    10  4/16/2017   A
1     7   4/14/2017   30  5/13/2017   A
1     8   4/17/2017   30  5/16/2017   A
1     9   5/9/2017    30  6/7/2017    B
1     10  5/16/2017   30  6/14/2017   A
1     11  1/17/2018   60  3/17/2018   B
1     12  1/23/2018   30  2/21/2018   A
1     13  2/13/2018   30  3/14/2018   A
1     14  2/15/2018   30  3/16/2018   B
1     15  3/14/2018   30  4/12/2018   A
1     16  3/14/2018   30  4/12/2018   A
1     17  4/1/2018    30  4/30/2018   B
2     3   2/9/2017    30  3/10/2017   B
2     4   2/9/2017    30  3/10/2017   B
2     5   2/16/2017   30  3/17/2017   A
2     6   3/13/2017   30  4/11/2017   B
2     7   3/13/2017   30  4/11/2017   B
2     8   3/17/2017   30  4/15/2017   A
2     9   4/10/2017   30  5/9/2017    B
2     10  4/15/2017   30  5/14/2017   A
2     11  5/14/2017   352     4/30/2018   B
2     12  5/14/2017   30  6/12/2017   A
;

proc sort data=have; by id drug start_date; run;

proc sql;
select intnx("day", min(start_date), -3), max(last_date) 
into :arrayStart, :arrayLast
from have;
quit;

data overlaps;
array d {&amp;amp;arrayStart:&amp;amp;arrayLast} $1 _temporary_;
do until(last.id);
    set have; by id;
    do dt = intnx("day", start_date, -3) to last_date;
        if missing(d{dt}) then d{dt} = drug;
        else if d{dt} ne drug then output;
        end;
    end;
format dt yymmdd10.;
keep id dt;
run;
        
proc sql;
select unique 
    id,
    intnx("month", dt, 0) as overlapMonth format=yymmd7.
from overlaps;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image.png" style="width: 102px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49618i182A79A0839E9B77/image-size/large?v=v2&amp;amp;px=999" role="button" title="image.png" alt="image.png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2020 18:58:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/685507#M207912</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2020-09-21T18:58:58Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686587#M208381</link>
      <description>&lt;P&gt;Hi Jim,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you so much for your code. The result is exactly what I want to create.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have tried your code and SAS reads the correct number of observation where drug='A' and drug='B', but has 0 observation for the final dataset. Following is what log provided, just so you know that I change dataset to a simpler one to have a easy way to find whether the code is working. I am attaching this dataset here below. Is it because I changed character/numeric variables?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SAS Log:&lt;/P&gt;
&lt;P&gt;NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).&lt;BR /&gt;631:19 632:47 646:19 647:47&lt;BR /&gt;NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).&lt;BR /&gt;660:41&lt;BR /&gt;NOTE: There were 6 observations read from the data set WORK.TEST.&lt;BR /&gt;WHERE Drug='A';&lt;BR /&gt;NOTE: There were 7 observations read from the data set WORK.TEST.&lt;BR /&gt;WHERE Drug='B';&lt;BR /&gt;NOTE: The data set WORK.RX_PERIOD_EVALUATED has 0 observations and 3 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;real time 0.04 seconds&lt;BR /&gt;cpu time 0.03 seconds&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you so much!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 01:20:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686587#M208381</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-25T01:20:38Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686588#M208382</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you so much for your code!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What my desired output is just exactly like Jim's result table.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I tried your code and didn't get your result table. What I got is that I can create have_A and have_B but failed to create dataset-want. It seems SAS has the same issue when I tried Jim's code. This is what SAS log provided (I am using a simpler dataset attached below):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;NOTE: There were 6 observations read from the data set WORK.HAVE_A.&lt;BR /&gt;NOTE: There were 7 observations read from the data set WORK.HAVE_B.&lt;BR /&gt;NOTE: The data set WORK.WANT has 0 observations and 6 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;real time 0.01 seconds&lt;BR /&gt;cpu time 0.01 seconds&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you have any sense what is going wrong here?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you very much!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 01:31:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686588#M208382</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-25T01:31:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686593#M208385</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let me take a look at the new data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 02:16:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686593#M208385</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-25T02:16:21Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686604#M208395</link>
      <description>&lt;P&gt;Hi, &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Yes, you are correct.&amp;nbsp; A few adjustments were required to accommodate a numeric ID.&amp;nbsp; A numeric ID is actually easier to work with in this case and made the program a little simpler.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the revised code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%LET	Start_Of_Period		=	'01JAN2017'd;
%LET	End_Of_Period		=	'30APR2018'd;

LIBNAME	DrugDate	XLSX	'.\SampleData\test_CW_20200921_M.xlsx';

DATA	Rx_Dates;
	SET	DrugDate.'#LN00067'n;
RUN;

**------------------------------------------------------------------------------**;

DATA	Rx_Period_Evaluated;
	KEEP	ID	Drug_Date	Both;
	LENGTH	ID						8;
	LENGTH	Drug_Date				8.;
	FORMAT	Drug_Date				MMDDYYS10.;
	LENGTH	End_of_Taking			8.;
	FORMAT	End_of_Taking			MMDDYYS10.;
	LENGTH	Start_of_Period			8.;
	FORMAT	Start_of_Period			MMDDYYS10.;
	LENGTH	End_of_Period			8.;
	FORMAT	End_of_Period			MMDDYYS10.;
	RETAIN	Max_ID					0;

	IF	_N_							=	1							THEN
		DO;
			CALL	MISSING(Drug_Date);
			DECLARE	HASH	Hsh_A_Dates();
			Hsh_A_Dates.DefineKey('ID', 'Drug_Date');
			Hsh_A_Dates.DefineDone();
			CALL	MISSING(Drug_Date);
			DECLARE	HASH	Hsh_B_Dates();
			Hsh_B_Dates.DefineKey('ID', 'Drug_Date');
			Hsh_B_Dates.DefineDone();
		END;

	**	Load drug A hash table.		**;
	DO	WHILE(NOT	End_Of_A);
		SET	Rx_Dates	
			END						=	End_Of_A;
			WHERE	Drug			=	'A';
		IF	ID						&amp;gt;	Max_ID	THEN
			DO;
				Max_ID				=	ID;
			END;
		Drug_Date					=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking				=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
		DO	WHILE(Drug_Date			&amp;lt;=	End_of_Taking);
			_RC_A					=	Hsh_A_Dates.ADD();
			Drug_Date				=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	**	Load drug B hash table.		**;
	DO	WHILE(NOT	End_Of_B);
		SET	Rx_Dates	
			END						=	End_Of_B;
			WHERE	Drug			=	'B';
		IF	ID						&amp;gt;	Max_ID	THEN
			DO;
				Max_ID				=	ID;
			END;
		Drug_Date					=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking				=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
		DO	WHILE(Drug_Date			&amp;lt;=	End_of_Taking);
			_RC_B					=	Hsh_B_Dates.ADD();
			Drug_Date				=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	Start_Of_Period					=	INTNX('MONTH', &amp;amp;Start_Of_Period, 0);
	End_Of_Period					=	INTNX('MONTH', &amp;amp;End_Of_Period, 1) - 1;

	**	Evaluate Drug A and Drug B tables month by month by ID.		**;
	DO	ID							=	1	TO	Max_ID;
		Drug_Date					=	Start_Of_Period;
		DO	WHILE(Drug_Date			&amp;lt;=	End_Of_Period);
			_RC_A					=	Hsh_A_Dates.FIND();
			_RC_B					=	Hsh_B_Dates.FIND();
			IF	Hsh_A_Dates.FIND()	=	0	AND
				Hsh_B_Dates.FIND()	=	0	THEN
				DO;
					Both			=	1;
				END;
			ELSE
				DO;
					Both			=	0;
				END;
			OUTPUT;
			Drug_Date				=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	STOP;
RUN;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The results based on the new data are as follows:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1601005936612.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49767i559A0B6B271D0306/image-size/large?v=v2&amp;amp;px=999" role="button" title="jimbarbour_0-1601005936612.png" alt="jimbarbour_0-1601005936612.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have manually checked the results, and they appear to be correct.&amp;nbsp; If there are any apparent discrepancies, let's go over them.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 04:52:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686604#M208395</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-25T04:52:36Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686631#M208406</link>
      <description>&lt;P&gt;Hi Jim,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I really appreciate your prompt reply a lot!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Your code is working this time!!! I just found a typo that the first prescription for ID=3 should be 8/3/2017 to 9/1/2017 other than 8/3/2018 to 9/1/2018. So sorry for this mistake. Did you use my second definition to calculate the variable Both, that is if drug A and drug B are taken even in 3 days interval (including the scenario when they are actually taken on the same day), it is still considered as an overlapping use of both A and B? If not, that is you are using the first definition, shouldn't it be all 0 for the 16 months period for ID=3?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 08:17:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686631#M208406</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-25T08:17:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686687#M208422</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am using the first definition.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Essentially, I am going month by month.&amp;nbsp; If drug A and drug B were both taken any time in a given month, then I am marking them as a "1".&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1601039716310.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49784i68EC860F259B6D57/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jimbarbour_0-1601039716310.png" alt="jimbarbour_0-1601039716310.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;It sounds like I need to go down to the day level and not just the month, yes?&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And do you need definition 1 or definition 2?&amp;nbsp; Or do you need a program that can switch back and forth?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 13:16:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686687#M208422</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-25T13:16:57Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686861#M208471</link>
      <description>&lt;P&gt;Hi Jim,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am sincerely grateful for your continuous advice and help on this project! I appreciate it a lot!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To get back to the question. Yes, we need to go down to the day level. For ID=3, the 1st prescription (drug B) from 8/3/2017 to &lt;U&gt;9/1&lt;/U&gt;/2017 (please update the typo, it should be 2017 but 2018) has &lt;STRONG&gt;No overlapping use&lt;/STRONG&gt; with the 2nd prescription (drug A) from &lt;U&gt;9/3&lt;/U&gt;/2017 to 10/2/2017 according to the definition 1. Having both drug A and drug B taking any time in a given month doesn't necessarily make any overlapping use happened. Having both of them in any given day does.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However, it was &lt;STRONG&gt;an overlapping use&lt;/STRONG&gt; based on the definition 2 since ID=3 started taking drug A (9/3/2017) &lt;U&gt;within 3 days&lt;/U&gt; after the last day of taking drug B (9/1/2017). If the 2nd prescription (drug A) started on 9/5/2017 (not as it is right now on 9/3/2017),&amp;nbsp; which is the 4th day after the last day of taking drug B, then &lt;STRONG&gt;it would NOT&lt;/STRONG&gt; be considered as an overlapping use based on the definition 2.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Definition 1:&amp;nbsp;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;If interval&amp;lt;=0 day then overlapping use=Yes; if interval&amp;gt;=1 day then overlapping use=0. (Interval is the day difference in start_taking_date and last_taking_date between two different drugs)&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Definition 2:&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;If interval&amp;lt;=3 day then overlapping use=Yes; if interval&amp;gt;=4 day then overlapping use=0&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I need two programs, one program for the definition 1 and a separate program for the definition 2.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Fri, 25 Sep 2020 23:25:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686861#M208471</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-25T23:25:47Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686935#M208503</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;OK, good.&amp;nbsp; I think I understand now.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So here are my results, in two sets.&amp;nbsp; On the left is definition one, with no extra days.&amp;nbsp; On the right, is definition two, with three extra days.&amp;nbsp; Please see what you think.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By the way, these results are both from the same program.&amp;nbsp; I just created a macro variable at the beginning of the program called "extra days."&amp;nbsp; If you set extra days to 0, then you are using definition one.&amp;nbsp; If you set extra days to 3, then you are using definition two.&amp;nbsp; The program is a bit long, so I will post it separately, but if these results look good, you should create additional test data and try running the program.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There are some additional macro variables:&lt;/P&gt;
&lt;P&gt;Db - Debug option.&amp;nbsp; Use an '*' (asterisk) for normal runs or blank to include debugging statements in the SAS log.&lt;/P&gt;
&lt;P&gt;Start_Of_Period - Start producing results as the month of this date.&lt;/P&gt;
&lt;P&gt;End_Of_Period - Stop producing results as the month of this date.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1601136299693.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49826i39678F96B5EB7E05/image-size/large?v=v2&amp;amp;px=999" role="button" title="jimbarbour_0-1601136299693.png" alt="jimbarbour_0-1601136299693.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 26 Sep 2020 16:11:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686935#M208503</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-26T16:11:25Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686936#M208504</link>
      <description>&lt;P&gt;And here is the SAS code.&amp;nbsp; Please ask questions as needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note:&amp;nbsp; In my autoexec.sas, I have some definitions:&lt;/P&gt;
&lt;P&gt;%LET Err1 = ERROR:;&lt;/P&gt;
&lt;P&gt;%LET Nte1 = NOTE:;&lt;/P&gt;
&lt;P&gt;%LET Nte2 = NOTE-;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;**	Debug option.  Asterisk is no debugging.  Blank for debugging.	**;
%LET	Db									=	;

**	Start producing results as of this month						**;
%LET	Start_Of_Period						=	'01JAN2017'd;

**	Stop producing results as of this month							**;
%LET	End_Of_Period						=	'30APR2018'd;

**	Extend the overlap period by +/- this number of days.			**;
%LET	Extra_Days							=	3;

LIBNAME	DrugDate	XLSX	"&amp;amp;Path\SampleData\test_CW_20200921_M.xlsx";

DATA	Rx_Dates;
	SET	DrugDate.'#LN00067'n;
RUN;

**------------------------------------------------------------------------------**;

DATA	Rx_Period_Evaluated;
	KEEP	ID	Drug_Date	Both;
	LENGTH	ID						8;
	LENGTH	Drug_Date				8.;
	FORMAT	Drug_Date				YYMMD7.;
	LENGTH	End_of_Taking			8.;
	FORMAT	End_of_Taking			MMDDYYS10.;
	LENGTH	Start_of_Period			8.;
	FORMAT	Start_of_Period			MMDDYYS10.;
	LENGTH	End_of_Period			8.;
	FORMAT	End_of_Period			MMDDYYS10.;
	LENGTH	Save_Start_Date			8.;
	FORMAT	Save_Start_Date			MMDDYYS10.;
	LENGTH	Save_End_Date			8.;
	FORMAT	Save_End_Date			MMDDYYS10.;
	LENGTH	Temp_Start_Date			8.;
	FORMAT	Temp_Start_Date			MMDDYYS10.;
	LENGTH	Temp_End_Date			8.;
	FORMAT	Temp_End_Date			MMDDYYS10.;
	RETAIN	Max_ID					0;

	IF	_N_									=	1	THEN
		DO;
			CALL	MISSING							(Drug_Date);
			DECLARE	HASH	Hsh_A_Dates				();
							Hsh_A_Dates.DefineKey 	('ID', 'Drug_Date');
							Hsh_A_Dates.DefineData	('Start_Taking_Date', 'Last_Taking_Date');
							Hsh_A_Dates.DefineDone	();
			DECLARE	HASH	Hsh_B_Dates				();
							Hsh_B_Dates.DefineKey 	('ID', 'Drug_Date');
							Hsh_B_Dates.DefineData	('Start_Taking_Date', 'Last_Taking_Date');
							Hsh_B_Dates.DefineDone	();
		END;

	**	Load drug A hash table.		**;
&amp;amp;Db	PUTLOG	"&amp;amp;Nte2  ";
&amp;amp;Db	PUTLOG	"&amp;amp;Nte1  Loading Drug A";
	DO	WHILE(NOT	End_Of_A);
		SET	Rx_Dates	
			END								=	End_Of_A;
			WHERE	Drug					=	'A';
		Save_Start_Date						=	Start_Taking_Date;
		Save_End_Date						=	Last_Taking_Date;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Start processing "	ID= Save_Start_Date= Save_End_Date= _RC_A=;
		IF	ID								&amp;gt;	Max_ID				THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Changing Max_ID from to "	Max_ID=	ID=;
				Max_ID						=	ID;
			END;
		Drug_Date							=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking						=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  "	ID= Drug_Date= End_of_Taking=;
		DO	WHILE(Drug_Date					&amp;lt;=	End_of_Taking);
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  "	ID=	"Iterate DO WHILE " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
			LINK	Chk_Dates;
			_RC_A							=	Hsh_A_Dates.ADD();
			IF	_RC_A						&amp;gt;	0					THEN
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" already exists " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
					Needs_Update			=	0;
					LINK	Replace_A;
				END;
			ELSE
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" Add Successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
				END;
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  ";
			Drug_Date						=	INTNX('MONTH', Drug_Date, 1);
			Start_Taking_Date				=	Save_Start_Date;
			Last_Taking_Date				=	Save_End_Date;
		END;
	END;

	**	Load drug B hash table.		**;
&amp;amp;Db	PUTLOG	"&amp;amp;Nte2  ";
&amp;amp;Db	PUTLOG	"&amp;amp;Nte1  Loading Drug B";
	DO	WHILE(NOT	End_Of_B);
		SET	Rx_Dates	
			END								=	End_Of_B;
			WHERE	Drug					=	'B';
		Save_Start_Date						=	Start_Taking_Date;
		Save_End_Date						=	Last_Taking_Date;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Start processing "	ID= Save_Start_Date= Save_End_Date= _RC_B=;
		IF	ID								&amp;gt;	Max_ID				THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Changing Max_ID from to "	Max_ID=	ID=;
				Max_ID						=	ID;
			END;
		Drug_Date							=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking						=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  "	ID= Drug_Date= End_of_Taking=;
		DO	WHILE(Drug_Date					&amp;lt;=	End_of_Taking);
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  "	ID=	"Iterate DO WHILE " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
			LINK	Chk_Dates;
			_RC_B							=	Hsh_B_Dates.ADD();
			IF	_RC_B						&amp;gt;	0					THEN
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" already exists " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
					Needs_Update			=	0;
					LINK	Replace_B;
				END;
			ELSE
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" Add Successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
				END;
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  ";
			Drug_Date						=	INTNX('MONTH', Drug_Date, 1);
			Start_Taking_Date				=	Save_Start_Date;
			Last_Taking_Date				=	Save_End_Date;
		END;
	END;

	Start_Of_Period							=	INTNX('MONTH', &amp;amp;Start_Of_Period, 0);
	End_Of_Period							=	INTNX('MONTH', &amp;amp;End_Of_Period, 1) - 1;

	**	Evaluate Drug A and Drug B tables month by month by ID.		**;
&amp;amp;Db	PUTLOG	"&amp;amp;Nte2  ";
&amp;amp;Db	PUTLOG	"&amp;amp;Nte1  Evaluating Drug A and Drug B tables";
	DO	ID									=	1	TO	Max_ID;
		Drug_Date							=	Start_Of_Period;
		DO	WHILE(Drug_Date					&amp;lt;=	End_Of_Period);
			_RC_A							=	Hsh_A_Dates.FIND();
			Temp_Start_Date					=	Start_Taking_Date;
			Temp_End_Date					=	Last_Taking_Date;
			_RC_B							=	Hsh_B_Dates.FIND();
&amp;amp;Db			PUTLOG	"&amp;amp;Nte1  "	ID= Drug_Date=	End_Of_Period=	_RC_A=	_RC_B=;
			IF	_RC_A						=	0	AND
				_RC_B						=	0	THEN
				DO;
					IF	(Start_Taking_Date	-	&amp;amp;Extra_Days		&amp;lt;=	Temp_Start_Date		&amp;lt;=	Last_Taking_Date	+	&amp;amp;Extra_Days)	OR
						(Temp_Start_Date	-	&amp;amp;Extra_Days		&amp;lt;=	Start_Taking_Date	&amp;lt;=	Temp_End_Date		+	&amp;amp;Extra_Days)	OR
						(Start_Taking_Date	-	&amp;amp;Extra_Days		&amp;lt;=	Temp_End_Date		&amp;lt;=	Last_Taking_Date	+	&amp;amp;Extra_Days)	OR
						(Temp_Start_Date	-	&amp;amp;Extra_Days		&amp;lt;=	Last_Taking_Date	&amp;lt;=	Temp_End_Date		+	&amp;amp;Extra_Days)	THEN
						DO;
							Both			=	1;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  Dates within range " ID= Temp_Start_Date= Temp_End_Date= Start_Taking_Date= Last_Taking_Date=;
						END;
					ELSE
						DO;
							Both			=	0;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  No match on dates  " ID= Temp_Start_Date= Temp_End_Date= Start_Taking_Date= Last_Taking_Date=;
						END;
				END;
			ELSE
				DO;
					Both					=	0;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  Both months not populated " ID= Drug_Date= End_Of_Period= Both= _RC_A= _RC_B=;
				END;
			OUTPUT;
			Drug_Date						=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	STOP;

	*********;
	Replace_A:
	*********;
		_RC_A								=	Hsh_A_Dates.FIND();
		IF	_RC_A							&amp;gt;	0					THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  "	ID= " Error on FIND   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
			END;
		LINK	Updt_Dates;
		IF	Needs_Update											THEN
			DO;
				_RC_A						=	Hsh_A_Dates.REPLACE();
				IF	_RC_A					&amp;gt;	0					THEN
					DO;
&amp;amp;Db						PUTLOG	"&amp;amp;Nte2  "	ID= " Error on replace   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
					END;
				ELSE
					DO;
&amp;amp;Db						PUTLOG	"&amp;amp;Nte2  "	ID= " Replace successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
					END;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  "	ID= " No update needed   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
			END;
	******;
	RETURN;
	******;

	*********;
	Replace_B:
	*********;
		_RC_B								=	Hsh_B_Dates.FIND();
		IF	_RC_B							&amp;gt;	0					THEN
			DO;
				PUTLOG	"&amp;amp;Err1  "	ID= " Error on FIND   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
			END;
		LINK	Updt_Dates;
		IF	Needs_Update											THEN
			DO;
				_RC_B						=	Hsh_B_Dates.REPLACE();
				IF	_RC_B					&amp;gt;	0					THEN
					DO;
						PUTLOG	"&amp;amp;Err1  "	ID= " Error on replace   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
					END;
				ELSE
					DO;
&amp;amp;Db						PUTLOG	"&amp;amp;Nte2  "	ID= " Replace successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
					END;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  "	ID= " No update needed   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
			END;
	******;
	RETURN;
	******;

	*********;
	Chk_Dates:
	*********;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Chk_Dates Begin "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
		IF	Start_Taking_Date				&amp;lt;	Drug_Date			THEN
			Start_Taking_Date				=	Drug_Date;
		IF	Last_Taking_Date				&amp;gt;	INTNX('MONTH', Drug_Date, 1) - 1	THEN
			Last_Taking_Date				=	INTNX('MONTH', Drug_Date, 1) - 1;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Chk_Dates End   "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
	******;
	RETURN;
	******;

	**********;
	Updt_Dates:
	**********;
		Temp_Start_Date						=	Start_Taking_Date;
		Temp_End_Date						=	Last_Taking_Date;
		IF	Save_Start_Date					&amp;lt;	Start_Taking_Date	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update start before "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
				Start_Taking_Date			=	Save_Start_Date;
				LINK	Chk_Dates;
				IF	Start_Taking_Date		&amp;lt;	Temp_Start_Date		THEN
					Needs_Update			=	1;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update start after  "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date= Needs_Update=;
			END;
		IF	Save_End_Date					&amp;gt;	Last_Taking_Date	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update end before   "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
				Last_Taking_Date			=	Save_End_Date;
				LINK	Chk_Dates;
				IF	Last_Taking_Date		&amp;gt;	Temp_End_Date		THEN	
					Needs_Update			=	1;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update end after    "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date= Needs_Update=;
			END;
	******;
	RETURN;
	******;
RUN;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 26 Sep 2020 16:22:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/686936#M208504</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-26T16:22:46Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687050#M208555</link>
      <description>&lt;P&gt;Hi Jim,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You don't know how much I appreciate your help with my project!!! It really makes my work moving forward!!! I tried your code for both definition 1 and definition 2 based on my dataset, and they all worked very well!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I took your advice to test the code with a new dataset. I am attaching the new dataset here. I found the code for definition 1 worked for the new data very correctly, however, it cannot provide the precise result when applying to definition 2 for ID=4 (for ID=1-3, it worked very well). For example, the overlapping uses for ID=4 should be 2/4/2017 to 3/3/2017 and 5/3/2017, that is the variable Both=1 for 2017-02, 03, and 05. But SAS only returned as 2017-02. I changed the %LET Extra_days=3 when testing the code for definition 2. I resolved this issue by creating a new variable called last_taking_date_Ext=last_taking_date + 3, that is although the actual last taking date is on 2/28/2017 or 4/30/2017, the effect of the drug lasts until 3/3/2017 and 5/3/2017. Is there any way to fix the code to let it more appropriate for my new dataset?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know you have generously spent your time on my project for very long time, I sincerely appreciate your great advice and help!!!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Sun, 27 Sep 2020 17:19:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687050#M208555</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-27T17:19:14Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687051#M208556</link>
      <description>&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;BR /&gt;&lt;BR /&gt;Let me take another look at the code when I get home.  I coded things with hard month boundaries.  Maybe for the extended periods I need to be more flexible with the month boundaries. &lt;BR /&gt;&lt;BR /&gt;Jim</description>
      <pubDate>Sun, 27 Sep 2020 17:47:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687051#M208556</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-27T17:47:19Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687135#M208582</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've got my program mostly working, but one month for ID 4 disagrees with what I think it should be.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When you have a moment, would you look over the following table that I put together by hand.&amp;nbsp; This is what I think my program should output (once I get it debugged).&amp;nbsp; Would you verify that the Definition 1 and Definition 2 values (0 or 1) are correct?&amp;nbsp; If they're not correct, would you please maybe make a note of why a particular value is incorrect?&amp;nbsp; That would be super helpful.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1601274787571.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49883iC2C2373A165667DB/image-size/large?v=v2&amp;amp;px=999" role="button" title="jimbarbour_0-1601274787571.png" alt="jimbarbour_0-1601274787571.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 28 Sep 2020 06:33:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687135#M208582</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-28T06:33:52Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687365#M208659</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think I've got everything working now.&amp;nbsp; Sorry this took a while.&amp;nbsp; Busy weekend and busy at work right now.&amp;nbsp; I have to fit SAS community coding in where I can.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are my results which I believe match the requirements.&amp;nbsp; Definition 1 is on the left.&amp;nbsp; Definition 2 is on the right.&amp;nbsp; I'll post the code below that.&amp;nbsp; Please let me know if this works for you.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1601334629825.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/49910i41AEA5E3A345EFE8/image-size/large?v=v2&amp;amp;px=999" role="button" title="jimbarbour_0-1601334629825.png" alt="jimbarbour_0-1601334629825.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;**	Debug option.  Asterisk is no debugging.  Blank for debugging.	**;
%LET	Db									=	;

**	Start producing results as of this month						**;
%LET	Start_Of_Period						=	'01JAN2017'd;

**	Stop producing results as of this month							**;
%LET	End_Of_Period						=	'30APR2018'd;

**	Extend the overlap period by +/- this number of days.			**;
%LET	Extra_Days							=	3;

%LET	Extended_Data						=	NO;
*%LET	Extended_Data						=	YES;

**------------------------------------------------------------------------------**;

*LIBNAME 	DrugDate	XLSX	"&amp;amp;Path\SampleData\test_CW_20200921_M.xlsx";
LIBNAME 	DrugDate	XLSX	"&amp;amp;Path\SampleData\test_CW_20200926_M.xlsx";

**------------------------------------------------------------------------------**;

DATA	Rx_Dates;
	SET	DrugDate.'#LN00067'n;
RUN;

**------------------------------------------------------------------------------**;

DATA	Rx_Period_Evaluated	(KEEP=ID 
		%IF	%UPCASE(&amp;amp;Extended_Data)	=	YES	%THEN
			%DO;
				A_Start_Date A_End_Date B_Start_Date B_End_Date 
			%END;
		Drug_Date Both)
	A_Dates	(KEEP=ID Drug_Date Start_Taking_Date Last_Taking_Date)
	B_Dates	(KEEP=ID Drug_Date Start_Taking_Date Last_Taking_Date)
	;
	
	LENGTH	ID						8;
	LENGTH	Drug_Date				8.;
	FORMAT	Drug_Date				YYMMDDS10.;
	FORMAT	Save_Drug_Date			YYMMDDS10.;
	LENGTH	End_of_Taking			8.;
	FORMAT	End_of_Taking			MMDDYYS10.;
	LENGTH	Start_of_Period			8.;
	FORMAT	Start_of_Period			MMDDYYS10.;
	LENGTH	End_of_Period			8.;
	FORMAT	End_of_Period			MMDDYYS10.;
	LENGTH	Save_Start_Date			8.;
	FORMAT	Save_Start_Date			MMDDYYS10.;
	LENGTH	Save_End_Date			8.;
	FORMAT	Save_End_Date			MMDDYYS10.;
	LENGTH	Temp_Start_Date			8.;
	FORMAT	Temp_Start_Date			MMDDYYS10.;
	LENGTH	Temp_End_Date			8.;
	FORMAT	Temp_End_Date			MMDDYYS10.;
	FORMAT	A_Start_Date			MMDDYYS10.;
	FORMAT	A_End_Date				MMDDYYS10.;
	FORMAT	B_Start_Date			MMDDYYS10.;
	FORMAT	B_End_Date				MMDDYYS10.;


	RETAIN	Max_ID					0;
	RETAIN	Extra_Days				0;

	**------------------------------**;
	**	Define hash tables.			**;
	**------------------------------**;
	IF	_N_									=	1	THEN
		DO;
			Extra_Days						=	&amp;amp;Extra_Days;
			CALL	MISSING							(Drug_Date);
			DECLARE	HASH	Hsh_A_Dates				(ORDERED: 'A', MULTIDATA: 'N');
							Hsh_A_Dates.DefineKey 	('ID', 'Drug_Date');
							Hsh_A_Dates.DefineData	('ID', 'Drug_Date', 'Start_Taking_Date', 'Last_Taking_Date');
							Hsh_A_Dates.DefineDone	();
			DECLARE	HITER	Hit_A_Dates('Hsh_A_Dates');
			DECLARE	HASH	Hsh_B_Dates				(ORDERED: 'A', MULTIDATA: 'N');
							Hsh_B_Dates.DefineKey 	('ID', 'Drug_Date');
							Hsh_B_Dates.DefineData	('ID', 'Drug_Date', 'Start_Taking_Date', 'Last_Taking_Date');
							Hsh_B_Dates.DefineDone	();
			DECLARE	HITER	Hit_B_Dates('Hsh_B_Dates');
		END;

	**------------------------------**;
	**	Load drug A hash table.		**;
	**------------------------------**;
&amp;amp;Db	PUTLOG	"&amp;amp;Nte2  ";
&amp;amp;Db	PUTLOG	"&amp;amp;Nte1  Loading Drug A";
	DO	WHILE(NOT	End_Of_A);
		SET	Rx_Dates	
			END								=	End_Of_A;
			WHERE	Drug					=	'A';
		Save_Start_Date						=	Start_Taking_Date;
		Save_End_Date						=	Last_Taking_Date;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Start processing "	ID= Save_Start_Date= Save_End_Date= _RC_A=;
		IF	ID								&amp;gt;	Max_ID				THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Changing Max_ID from to "	Max_ID=	ID=;
				Max_ID						=	ID;
			END;
		Drug_Date							=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking						=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  "	ID= Drug_Date= End_of_Taking=;
		DO	WHILE(Drug_Date					&amp;lt;=	End_of_Taking);
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  "	ID=	"Iterate DO WHILE " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
			LINK	Chk_Dates;
			_RC_A							=	Hsh_A_Dates.ADD();
			IF	_RC_A						&amp;gt;	0					THEN
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" already exists " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
					Needs_Update			=	0;
					LINK	Replace_A;
				END;
			ELSE
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" Add Successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
				END;
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  ";
			Drug_Date						=	INTNX('MONTH', Drug_Date, 1);
			Start_Taking_Date				=	Save_Start_Date;
			Last_Taking_Date				=	Save_End_Date;
		END;
	END;

	**------------------------------**;
	**	Load drug B hash table.		**;
	**------------------------------**;
&amp;amp;Db	PUTLOG	"&amp;amp;Nte2  ";
&amp;amp;Db	PUTLOG	"&amp;amp;Nte1  Loading Drug B";
	DO	WHILE(NOT	End_Of_B);
		SET	Rx_Dates	
			END								=	End_Of_B;
			WHERE	Drug					=	'B';
		Save_Start_Date						=	Start_Taking_Date;
		Save_End_Date						=	Last_Taking_Date;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Start processing "	ID= Save_Start_Date= Save_End_Date= _RC_B=;
		IF	ID								&amp;gt;	Max_ID				THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Changing Max_ID from to "	Max_ID=	ID=;
				Max_ID						=	ID;
			END;
		Drug_Date							=	INTNX('MONTH', Start_Taking_Date, 0);
		End_of_Taking						=	INTNX('MONTH', Last_Taking_Date, 1) - 1;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  "	ID= Drug_Date= End_of_Taking=;
		DO	WHILE(Drug_Date					&amp;lt;=	End_of_Taking);
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  "	ID=	"Iterate DO WHILE " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
			LINK	Chk_Dates;
			_RC_B							=	Hsh_B_Dates.ADD();
			IF	_RC_B						&amp;gt;	0					THEN
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" already exists " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
					Needs_Update			=	0;
					LINK	Replace_B;
				END;
			ELSE
				DO;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  "	ID=	" Add Successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
				END;
&amp;amp;Db			PUTLOG	"&amp;amp;Nte2  ";
			Drug_Date						=	INTNX('MONTH', Drug_Date, 1);
			Start_Taking_Date				=	Save_Start_Date;
			Last_Taking_Date				=	Save_End_Date;
		END;
	END;

	**--------------------------------------------------------------**;
	**	Initialize the start and end of the period of interest.		**;
	**--------------------------------------------------------------**;
	Start_Of_Period							=	INTNX('MONTH', &amp;amp;Start_Of_Period, 0);
	End_Of_Period							=	INTNX('MONTH', &amp;amp;End_Of_Period, 1) - 1;

	**--------------------------------------------------------------**;
	**	Create SAS data sets from drug tables for QC purposes.		**;
	**--------------------------------------------------------------**;
	_RC_A									=	0;
	ID										=	0;
	Drug_Date								=	Start_Of_Period;
	_RC_A									=	Hit_A_Dates.FIRST();
	DO	WHILE	(_RC_A						=	0);
		OUTPUT	A_Dates;
		_RC_A								=	Hit_A_Dates.NEXT();
	END;

	_RC_B									=	0;
	ID										=	0;
	Drug_Date								=	Start_Of_Period;
	_RC_B									=	Hit_B_Dates.FIRST();
	DO	WHILE	(_RC_B						=	0);
		OUTPUT	B_Dates;
		_RC_B								=	Hit_B_Dates.NEXT();
	END;

	**--------------------------------------------------------------**;
	**	Evaluate Drug A and Drug B tables month by month by ID.		**;
	**--------------------------------------------------------------**;
&amp;amp;Db	PUTLOG	"&amp;amp;Nte2  ";
&amp;amp;Db	PUTLOG	"&amp;amp;Nte1  Evaluating Drug A and Drug B tables";
	DO	ID									=	1	TO	Max_ID;
		Drug_Date							=	Start_Of_Period;
		DO	WHILE(Drug_Date					&amp;lt;=	End_Of_Period);
			_RC_A							=	Hsh_A_Dates.FIND();
			IF	_RC_A						=	0	THEN
				DO;
					A_Start_Date			=	Start_Taking_Date;
					A_End_Date				=	Last_Taking_Date;
				END;
			ELSE
				DO;
					CALL	MISSING(A_Start_Date, A_End_Date);
				END;
			_RC_B							=	Hsh_B_Dates.FIND();
			IF	_RC_B						=	0	THEN
				DO;
					B_Start_Date			=	Start_Taking_Date;
					B_End_Date				=	Last_Taking_Date;
				END;
			ELSE
				DO;
					CALL	MISSING(B_Start_Date, B_End_Date);
				END;
&amp;amp;Db			PUTLOG	"&amp;amp;Nte1  "	ID= Drug_Date=	End_Of_Period=	_RC_A=	_RC_B=;
			IF	_RC_A						=	0	OR
				_RC_B						=	0	THEN
				DO;
					IF	_RC_A				&amp;gt;	0	AND
						Extra_Days			&amp;gt;	0	THEN
						DO;
							LINK	A_Not_Found;
						END;
					ELSE
					IF	_RC_B				&amp;gt;	0	AND
						Extra_Days			&amp;gt;	0	THEN
						DO;
							LINK	B_Not_Found;
						END;
					IF	NOT NMISS(B_Start_Date, A_Start_Date, B_End_Date, Extra_Days)								AND
						(B_Start_Date		-	Extra_Days	&amp;lt;=	A_Start_Date	&amp;lt;=	B_End_Date	+	Extra_Days)		THEN
						DO;
							Both			=	1;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  Both.  A_Start between B_Start and B_Stop     " ID= A_Start_Date= A_End_Date= B_Start_Date= B_End_Date= Extra_Days=;
						END;
					ELSE
					IF	NOT NMISS(A_Start_Date, Extra_Days, B_Start_Date, A_End_Date)								AND
						(A_Start_Date		-	Extra_Days	&amp;lt;=	B_Start_Date	&amp;lt;=	A_End_Date	+	Extra_Days)		THEN
						DO;
							Both			=	1;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  Both.  B_Start between A_Start and A_End " ID= A_Start_Date= A_End_Date= B_Start_Date= B_End_Date= Extra_Days=;
						END;
					ELSE
					IF	NOT NMISS(B_Start_Date, Extra_Days, A_End_Date, B_End_Date, Extra_Days)						AND
						(B_Start_Date		-	Extra_Days	&amp;lt;=	A_End_Date		&amp;lt;=	B_End_Date	+	Extra_Days)		THEN
						DO;
							Both			=	1;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  Both.  A_End between B_start and B_stop       " ID= A_Start_Date= A_End_Date= B_Start_Date= B_End_Date= Extra_Days=;
						END;
					ELSE
					IF	NOT NMISS(A_Start_Date, Extra_Days, B_End_Date, A_End_Date, Extra_Days)						AND
						(A_Start_Date		-	Extra_Days	&amp;lt;=	B_End_Date		&amp;lt;=	A_End_Date	+	Extra_Days)		THEN
						DO;
							Both			=	1;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  Both.  B_End between A_Start and A_End   " ID= A_Start_Date= A_End_Date= B_Start_Date= B_End_Date= Extra_Days=;
						END;
					ELSE
						DO;
							Both			=	0;
&amp;amp;Db							PUTLOG	"&amp;amp;Nte2  No match on dates  " ID= A_Start_Date= A_End_Date= B_Start_Date= B_End_Date=;
						END;
				END;
			ELSE
				DO;
					Both					=	0;
&amp;amp;Db					PUTLOG	"&amp;amp;Nte2  Both months not populated " ID= Drug_Date= End_Of_Period= Both= _RC_A= _RC_B=;
				END;
			OUTPUT	Rx_Period_Evaluated;
			Drug_Date						=	INTNX('MONTH', Drug_Date, 1);
		END;
	END;

	STOP;

	*********;
	Replace_A:
	*********;
		_RC_A								=	Hsh_A_Dates.FIND();
		IF	_RC_A							&amp;gt;	0					THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  "	ID= " Error on FIND   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
			END;
		LINK	Updt_Dates;
		IF	Needs_Update											THEN
			DO;
				_RC_A						=	Hsh_A_Dates.REPLACE();
				IF	_RC_A					&amp;gt;	0					THEN
					DO;
&amp;amp;Db						PUTLOG	"&amp;amp;Nte2  "	ID= " Error on replace   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
					END;
				ELSE
					DO;
&amp;amp;Db						PUTLOG	"&amp;amp;Nte2  "	ID= " Replace successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
					END;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  "	ID= " No update needed   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_A=;
			END;
	******;
	RETURN;
	******;

	*********;
	Replace_B:
	*********;
		_RC_B								=	Hsh_B_Dates.FIND();
		IF	_RC_B							&amp;gt;	0					THEN
			DO;
				PUTLOG	"&amp;amp;Err1  "	ID= " Error on FIND   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
			END;
		LINK	Updt_Dates;
		IF	Needs_Update											THEN
			DO;
				_RC_B						=	Hsh_B_Dates.REPLACE();
				IF	_RC_B					&amp;gt;	0					THEN
					DO;
						PUTLOG	"&amp;amp;Err1  "	ID= " Error on replace   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
					END;
				ELSE
					DO;
&amp;amp;Db						PUTLOG	"&amp;amp;Nte2  "	ID= " Replace successful " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
					END;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  "	ID= " No update needed   " Drug_Date= Start_Taking_Date= Last_Taking_Date= End_of_Taking= _RC_B=;
			END;
	******;
	RETURN;
	******;

	*********;
	Chk_Dates:
	*********;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Chk_Dates Begin "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
		IF	Start_Taking_Date				&amp;lt;	Drug_Date			THEN
			Start_Taking_Date				=	Drug_Date;
		IF	Last_Taking_Date				&amp;gt;	INTNX('MONTH', Drug_Date, 1) - 1	THEN
			Last_Taking_Date				=	INTNX('MONTH', Drug_Date, 1) - 1;
&amp;amp;Db		PUTLOG	"&amp;amp;Nte2  Chk_Dates End   "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
	******;
	RETURN;
	******;

	**********;
	Updt_Dates:
	**********;
		Temp_Start_Date						=	Start_Taking_Date;
		Temp_End_Date						=	Last_Taking_Date;
		IF	Save_Start_Date					&amp;lt;	Start_Taking_Date	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update start before "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
				Start_Taking_Date			=	Save_Start_Date;
				LINK	Chk_Dates;
				IF	Start_Taking_Date		&amp;lt;	Temp_Start_Date		THEN
					Needs_Update			=	1;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update start after  "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date= Needs_Update=;
			END;
		IF	Save_End_Date					&amp;gt;	Last_Taking_Date	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update end before   "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date=;
				Last_Taking_Date			=	Save_End_Date;
				LINK	Chk_Dates;
				IF	Last_Taking_Date		&amp;gt;	Temp_End_Date		THEN	
					Needs_Update			=	1;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Update end after    "	ID= Start_Taking_Date= Last_Taking_Date= Save_Start_Date= Save_End_Date= Needs_Update=;
			END;
	******;
	RETURN;
	******;

	***********;
	A_Not_Found:
	***********;
		**	Save keys.	**;
		Save_Drug_Date						=	Drug_Date;

		**	Get start date from prior end date.	**;
		Drug_Date							=	INTNX('MONTH', Drug_Date, -1);
		_RC_A								=	Hsh_A_Dates.FIND();
		IF	_RC_A							=	0	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Prior A found     "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= A_Start_Date= A_End_Date=;
				A_Start_Date				=	Last_Taking_Date;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Prior A not found "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= A_Start_Date= A_End_Date=;
				CALL	MISSING(A_Start_Date);
			END;
		Drug_Date							=	Save_Drug_Date;

		**	Get end date from next start date.	**;
		Drug_Date							=	INTNX('MONTH', Drug_Date, 1);
		_RC_A								=	Hsh_A_Dates.FIND();
		IF	_RC_A							=	0	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Next A found      "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= A_Start_Date= A_End_Date=;
				A_End_Date					=	Start_Taking_Date;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Next A not found  "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= A_Start_Date= A_End_Date=;
				CALL	MISSING(A_End_Date);
			END;
		Drug_Date							=	Save_Drug_Date;
	******;
	RETURN;
	******;

	***********;
	B_Not_Found:
	***********;
		**	Save keys.	**;
		Save_Drug_Date						=	Drug_Date;

		**	Get start date from prior end date.	**;
		Drug_Date							=	INTNX('MONTH', Drug_Date, -1);
		_RC_B								=	Hsh_B_Dates.FIND();
		IF	_RC_B							=	0	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Prior B found     "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= B_Start_Date= B_End_Date=;
				B_Start_Date				=	Last_Taking_Date;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Prior B not found "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= B_Start_Date= B_End_Date=;
				CALL	MISSING(B_Start_Date);
			END;
		Drug_Date							=	Save_Drug_Date;

		**	Get end date from next start date.	**;
		Drug_Date							=	INTNX('MONTH', Drug_Date, 1);
		_RC_B								=	Hsh_B_Dates.FIND();
		IF	_RC_B							=	0	THEN
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Next B found      "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= B_Start_Date= B_End_Date=;
				B_End_Date					=	Start_Taking_Date;
			END;
		ELSE
			DO;
&amp;amp;Db				PUTLOG	"&amp;amp;Nte2  Next B not found  "	ID= Drug_Date= Start_Taking_Date= Last_Taking_Date= B_Start_Date= B_End_Date=;
				CALL	MISSING(B_End_Date);
			END;
		Drug_Date							=	Save_Drug_Date;
	******;
	RETURN;
	******;
RUN;

**------------------------------------------------------------------------------**;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 28 Sep 2020 23:12:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687365#M208659</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-28T23:12:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687621#M208766</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/266374"&gt;@CynthiaWei&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Did that latest version of the code work?&amp;nbsp; It should be able to accommodate all of the conditions in the data I've seen so far.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;</description>
      <pubDate>Tue, 29 Sep 2020 18:25:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687621#M208766</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2020-09-29T18:25:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a variable to represent the months of overlapping drug use</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687708#M208804</link>
      <description>&lt;P&gt;Hi Jim,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am so sorry for my late response.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;I think your code that was posted on 9/26/2020 12:22pm matches best with my desired result&lt;/STRONG&gt;. The only issue with this code is that the ID in my test data is from 1 and it is continuous, 1, 2, 3, and 4. However, the ID in my real data is not continuous and not start from 1. It is like 6, 10, 21, 23, 24, 29, and so on. &lt;STRONG&gt;How can I fix the code to accommodate it to my real data in terms of ID? Thank you so much!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Back to the table you put together by hand (I really appreciate that you did this for checking!!!). I think we have no problem with definition 1 since it is straightforward. I know definition 2 is very tricky and needs to have a better explanation. Let think in this way for definition 2.Drug A and B are not allowed to take simultaneously based on clinical guideline. Both drug A and B have a &lt;STRONG&gt;delayed effect (not an effect that could affect the previous drug)&lt;/STRONG&gt;, which means that blood concentration for each of them can still be tested even 3 days AFTER the last taking date of the other drug, whichever drug takes first. For ID=1, the actual effect for drug B is from 1/1/2017 to 7/2/2017 (3days after 6/29/2017). The actual effect of drug A of the 2nd prescription for ID=1 is from 2/1/2017 to 4/4/4/2017, the 3rd is from 3/1/2017 to 5/2/2017 (3 days after 4/29), and the 4th is from 4/1/2017 to 6/2/2017 (3 days after 5/20/2017). The actual period that drug B actually had effect on ID=1 covered the period that drug A was taking, and the overlapping use happened in 2017-02, 03, 04, 05, and 06, but not 2017-01. This is because ID=1 only took drug B but not drug A, so there was no overlapping use happened in 2017-01.&amp;nbsp; So, same for ID=4, the 1st prescription should be considered from 1/4/2017 to 3/3/2017, and the 3rd prescription should be from 3/7/2017 to 5/3/2017, so the overlapping use for ID=1 happened in 2017-02, 03, and 05. For ID=2, I think the overlapping use happened in 2017-06 and 07.&amp;nbsp;For ID=3, I think the overlapping use happened in 2017-09, 10, 11 and 12. Do you agree with me?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think one solution is to create a new variable titled last_taking_date_Ext by simply adding 3 to last_taking_take (last_taking_date_Ext=last_taking_date + 3), and this&amp;nbsp;last_taking_date_Ext that represents the actual last date for a specific drug is going to be replaced all the last_taking_date in the code when applying definition 2. Does it make sense?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Many many thanks for your effort and time again!!! I really this great learning opportunity!!!&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;C&lt;/P&gt;</description>
      <pubDate>Wed, 30 Sep 2020 02:27:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-variable-to-represent-the-months-of-overlapping/m-p/687708#M208804</guid>
      <dc:creator>CynthiaWei</dc:creator>
      <dc:date>2020-09-30T02:27:02Z</dc:date>
    </item>
  </channel>
</rss>

