<?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 identify a change across observations and flag it to create a new variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425921#M281141</link>
    <description>Hi Reeza,&lt;BR /&gt;&lt;BR /&gt;Thank you for your reply. I did anticipate this situation which is why I have posted this code with a new similar dataset and not the old one. The code seems to be working fine with the old dataset but this not with new similar data set.</description>
    <pubDate>Mon, 08 Jan 2018 21:18:35 GMT</pubDate>
    <dc:creator>shasank</dc:creator>
    <dc:date>2018-01-08T21:18:35Z</dc:date>
    <item>
      <title>How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425362#M281122</link>
      <description>&lt;P&gt;Hi SAS community,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for looking.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like your help in the following question.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a dataset with ID Drug and Startdate variables. Each observation means a drug given to each person on that specific data. I wanted to have a final dataset with a new variables that will be generated using following logic :-&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To create 'Regimen1' variable :-&lt;/P&gt;&lt;P&gt;Drug1&amp;nbsp;given to the person + all the drugs given within a period of 10 days of drug1 Startdate&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To create 'Regimen2' variable :-&lt;/P&gt;&lt;P&gt;Scan to see if there is any new Drug given to the person after Regimen1. If any found not in Regimen1 (lerts assume that new drug is name DrugX)&amp;nbsp; then Regimen2 is all drugs given in the interval of DrugX Startdate minus 3 days to Startdate of DrugX plus 10 days.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This should go on until there is no new drug given to the person.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The dataset looks like this.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PID&lt;/TD&gt;&lt;TD&gt;StartDate&lt;/TD&gt;&lt;TD&gt;Drug&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;9-May-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10-May-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10-May-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;30-May-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;31-May-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1-Jun-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2-Jun-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;30-Jun-12&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3-Jul-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;27-Jul-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;28-Jul-12&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;17-May-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;22-May-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;25-May-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1-Jun-12&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2-Jun-12&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3-Jun-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;26-Jun-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;29-Jun-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;27-Jul-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;25-Aug-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;26-Jun-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;27-Jun-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;28-Jun-12&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;25-Aug-12&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;26-Aug-12&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;27-Aug-12&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;The output should look like this.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PID&lt;/TD&gt;&lt;TD&gt;Regimen1&lt;/TD&gt;&lt;TD&gt;Regimen2&lt;/TD&gt;&lt;TD&gt;Regimen3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A + B&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;A + C&lt;/TD&gt;&lt;TD&gt;A+D&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A+B&lt;/TD&gt;&lt;TD&gt;B+C+D&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;A+B+C&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As told each ID represents&amp;nbsp;1 person.&lt;/P&gt;&lt;P&gt;Drug1 namely A was the 1st drug given to person 1. The Startdate of A was on 9-May-12. So, all drugs in the interval of&amp;nbsp; is 9/May/12 + 10days = 19/May/12 is Regimen1. only Drug A and Drug B were in that intervel. So, Regimen1 will have drugs A and B under it. as shown in the output table.&lt;/P&gt;&lt;P&gt;Next, Scan for other drugs given to person 1 and if any drug other than A or B (Regimen1). Under person 1 Drug C was given on 30/Jun/12 which is not in Regimen1.&amp;nbsp;&lt;/P&gt;&lt;P&gt;So, Regimen2 should have all the drugs given in the interval of drug C Startdate (30/Jun/12) minus 3 = 27/Jun/12 to Drug C startdate plus 10days = 10/Jul/12. So, Regimen2 should have Drugs A and C.&lt;/P&gt;&lt;P&gt;This logic is same for creation of Regimen3.&lt;/P&gt;&lt;P&gt;Regimen2 should contain drug not in Regimen1.&lt;/P&gt;&lt;P&gt;Regimen3 should trigger when there is a drug not in Regimen2&amp;nbsp; and&amp;nbsp; trigger the chain of Newdrug startdate - 3 to Newdrugstartdate+10.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This should be looped until there are no new drugs given to each person.&lt;/P&gt;&lt;P&gt;The sequence of drugs under the variable 'Regimen#' is not important. it can be A + B or B + A.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your time and help SAS Masters.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jan 2018 20:28:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425362#M281122</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-05T20:28:25Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425370#M281123</link>
      <description>&lt;P&gt;Here's a basic way, probably not as efficient as a hash solution.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Sort by Person, Drug&lt;/P&gt;
&lt;P&gt;2. Identify the first of each Drug - assumes no prior history not included which is unlikely realistically. You can create a data set here with only the first drug start date.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;3. Use a SQL join to find any other drugs assigned within 10 days&lt;/P&gt;
&lt;P&gt;4. Create your regiments by combing the rows using CATX.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;5. Transpose to a wide format -&amp;gt; this approach doesn't require any knowledge of how many possible combinations there are ahead of time.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Steps 1, 2 &amp;amp; 5 should be relatively easy.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For&amp;nbsp;&lt;/P&gt;
&lt;P&gt;#3&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/Base-SAS-Programming/finding-values-happened-30-days-before-a-reference-date-and-30/m-p/249922/highlight/true#M47084" target="_blank"&gt;https://communities.sas.com/t5/Base-SAS-Programming/finding-values-happened-30-days-before-a-reference-date-and-30/m-p/249922/highlight/true#M47084&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Lots of examples on here&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;#4:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://gist.github.com/statgeek/d583cfa992bf56da51d435165b07e96a" target="_blank"&gt;https://gist.github.com/statgeek/d583cfa992bf56da51d435165b07e96a&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you have questions or issues, post your code and explain the issue.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PS. Please make sure to include your data as a data step:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712" target="_blank"&gt;https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/110575"&gt;@shasank&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;Hi SAS community,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for looking.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would like your help in the following question.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a dataset with ID Drug and Startdate variables. Each observation means a drug given to each person on that specific data. I wanted to have a final dataset with a new variables that will be generated using following logic :-&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To create 'Regimen1' variable :-&lt;/P&gt;
&lt;P&gt;Drug1&amp;nbsp;given to the person + all the drugs given within a period of 10 days of drug1 Startdate&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To create 'Regimen2' variable :-&lt;/P&gt;
&lt;P&gt;Scan to see if there is any new Drug given to the person after Regimen1. If any found not in Regimen1 (lerts assume that new drug is name DrugX)&amp;nbsp; then Regimen2 is all drugs given in the interval of DrugX Startdate minus 3 days to Startdate of DrugX plus 10 days.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This should go on until there is no new drug given to the person.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The dataset looks like this.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;PID&lt;/TD&gt;
&lt;TD&gt;StartDate&lt;/TD&gt;
&lt;TD&gt;Drug&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;9-May-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;10-May-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;10-May-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;30-May-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;31-May-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;1-Jun-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2-Jun-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;30-Jun-12&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;3-Jul-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;27-Jul-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;28-Jul-12&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;17-May-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;22-May-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;25-May-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;1-Jun-12&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2-Jun-12&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3-Jun-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;26-Jun-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;29-Jun-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;27-Jul-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;25-Aug-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;26-Jun-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;27-Jun-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;28-Jun-12&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;25-Aug-12&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;26-Aug-12&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;27-Aug-12&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;The output should look like this.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;PID&lt;/TD&gt;
&lt;TD&gt;Regimen1&lt;/TD&gt;
&lt;TD&gt;Regimen2&lt;/TD&gt;
&lt;TD&gt;Regimen3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;A + B&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;A + C&lt;/TD&gt;
&lt;TD&gt;A+D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;A+B&lt;/TD&gt;
&lt;TD&gt;B+C+D&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;A+B+C&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As told each ID represents&amp;nbsp;1 person.&lt;/P&gt;
&lt;P&gt;Drug1 namely A was the 1st drug given to person 1. The Startdate of A was on 9-May-12. So, all drugs in the interval of&amp;nbsp; is 9/May/12 + 10days = 19/May/12 is Regimen1. only Drug A and Drug B were in that intervel. So, Regimen1 will have drugs A and B under it. as shown in the output table.&lt;/P&gt;
&lt;P&gt;Next, Scan for other drugs given to person 1 and if any drug other than A or B (Regimen1). Under person 1 Drug C was given on 30/Jun/12 which is not in Regimen1.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So, Regimen2 should have all the drugs given in the interval of drug C Startdate (30/Jun/12) minus 3 = 27/Jun/12 to Drug C startdate plus 10days = 10/Jul/12. So, Regimen2 should have Drugs A and C.&lt;/P&gt;
&lt;P&gt;This logic is same for creation of Regimen3.&lt;/P&gt;
&lt;P&gt;Regimen2 should contain drug not in Regimen1.&lt;/P&gt;
&lt;P&gt;Regimen3 should trigger when there is a drug not in Regimen2&amp;nbsp; and&amp;nbsp; trigger the chain of Newdrug startdate - 3 to Newdrugstartdate+10.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This should be looped until there are no new drugs given to each person.&lt;/P&gt;
&lt;P&gt;The sequence of drugs under the variable 'Regimen#' is not important. it can be A + B or B + A.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for your time and help SAS Masters.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jan 2018 20:41:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425370#M281123</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-05T20:41:07Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425438#M281124</link>
      <description>&lt;P&gt;Hi Reeza,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is what I have worked on. I get zero observations performing Proc SQL.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;please you identify any errors?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data Fulldata;
input ID Startdate Drug $;
informat Startdate date9.;
format startdate date9.;
cards;
1	9-May-12	A
1	10-May-12	A
1	10-May-12	B
1	30-May-12	B
1	31-May-12	A
1	1-Jun-12	A
1	2-Jun-12	B
1	30-Jun-12	C
1	3-Jul-12	A
1	27-Jul-12	A
1	28-Jul-12	D
2	17-May-12	A
2	22-May-12	B
2	25-May-12	B
2	1-Jun-12	C
2	2-Jun-12	D
2	3-Jun-12	B
3	26-Jun-12	A
3	29-Jun-12	A
3	27-Jul-12	B
3	25-Aug-12	B
4	26-Jun-12	A
4	27-Jun-12	B
4	28-Jun-12	C
4	25-Aug-12	A
4	26-Aug-12	B
4	27-Aug-12	B
run;

proc sort data = Fulldata out = b;
by ID drug ;
run;

data firstchem;
set b;
by ID Drug;
if first.drug and First.drug then output;
Firstdate = startdate;
drop startdate;
run;

proc sql;
create table preD as
select a.*, b.*, a.Startdate-b.Firstdate as days_before
from Fulldata as a
join firstchem as b
on a.id=b.id
where 0&amp;lt; (a.Startdate-b.Firstdate) &amp;lt; 3;
quit;

proc sql;
create table postD as 
select a.*, b.*, b.Firstdate-a.Startdate  as days_after
from Fulldata as a
join firstchem as b
on a.id=b.id
where 0&amp;lt; (b.Firstdate-a.Startdate) &amp;lt; 10;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 05 Jan 2018 23:21:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425438#M281124</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-05T23:21:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425441#M281125</link>
      <description>Verify your data is being read in correctly, given what I see here, I suspect not. You'll also want to join on making sure the drug isn't the same drug.</description>
      <pubDate>Fri, 05 Jan 2018 23:23:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425441#M281125</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-05T23:23:13Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425454#M281126</link>
      <description>Hi Reeza,&lt;BR /&gt;That was a typo. This is the syntax I used.&lt;BR /&gt;data firstchem;&lt;BR /&gt;set b;&lt;BR /&gt;by ID Drug;&lt;BR /&gt;if first.id and First.drug then output;&lt;BR /&gt;Firstdate = startdate;&lt;BR /&gt;drop startdate;&lt;BR /&gt;run;&lt;BR /&gt;Yet I get same missing</description>
      <pubDate>Fri, 05 Jan 2018 23:46:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425454#M281126</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-05T23:46:35Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425458#M281127</link>
      <description>&lt;P&gt;Here's a start then, I'm working on Reg1, within 10 days.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notice the 4th &amp;amp; 5th records in the output. You didn't specify how you'd want to deal with that situation.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data firstchem;
set b;
by ID Drug;
if first.drug then output;
rename StartDate = FirstDate;
run;


proc sql;
create table pre10 as
select FC.ID, FC.FirstDate, FD.StartDate, FC.Drug as Drug1, FD.Drug as Drug2, FD.StartDate-FC.Firstdate as Days_Diff
from firstchem as FC
join fulldata as FD
on FC.id=FD.id
and FC.drug ne FD.drug
and FD.StartDate &amp;gt;= FC.FirstDate
and FD.DRUG &amp;gt; FC.DRUG 
where calculated Days_Diff between 0 and 10;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 05 Jan 2018 23:59:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425458#M281127</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-05T23:59:08Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425464#M281128</link>
      <description>Hi Reeza,&lt;BR /&gt;&lt;BR /&gt;The logic is the same for the all the variable. Regimen2 should be compared&lt;BR /&gt;to regimen1. Regimen3 with Regimen2. Regimen4 with Regimen3. The regimen&lt;BR /&gt;creation also has the same logic of new drug minus 3 to new drug plus 10&lt;BR /&gt;for all regimens.&lt;BR /&gt;I hope I am clear.&lt;BR /&gt;</description>
      <pubDate>Sat, 06 Jan 2018 00:24:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425464#M281128</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-06T00:24:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425471#M281129</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/110575"&gt;@shasank&lt;/a&gt;&amp;nbsp; As much as I appreciate to have taken the effort to clarify your requirement in a much better way than what you did in the other thread - &lt;A href="https://communities.sas.com/t5/SAS-Data-Management/How-to-create-a-drug-course-using-dates/m-p/424692#M13047" target="_blank"&gt;https://communities.sas.com/t5/SAS-Data-Management/How-to-create-a-drug-course-using-dates/m-p/424692#M13047&lt;/A&gt; , your desperation is rather worrying.&lt;/P&gt;&lt;P&gt;Well, well, well here you go&lt;/P&gt;&lt;P&gt;I challenge you to clean my code and make it easily readable as i am tired&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; have;&lt;/P&gt;&lt;P&gt;input PID&amp;nbsp;&amp;nbsp; StartDate : date7.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Drug $;&lt;/P&gt;&lt;P&gt;format StartDate date7.;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9-May-12&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10-May-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10-May-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30-May-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 31-May-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1-Jun-12&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2-Jun-12&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30-Jun-12&amp;nbsp;&amp;nbsp; C&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3-Jul-12&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27-Jul-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28-Jul-12&amp;nbsp;&amp;nbsp; D&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 17-May-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22-May-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25-May-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1-Jun-12&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2-Jun-12&amp;nbsp;&amp;nbsp;&amp;nbsp; D&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3-Jun-12&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26-Jun-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29-Jun-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27-Jul-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25-Aug-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26-Jun-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27-Jun-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28-Jun-12&amp;nbsp;&amp;nbsp; C&lt;/P&gt;&lt;P&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25-Aug-12&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26-Aug-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27-Aug-12&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt; &lt;STRONG&gt;sql&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;select count(distinct Drug) into : reg_limit TRIMMED&lt;/P&gt;&lt;P&gt;from have;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%put &amp;amp;reg_limit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; want2;&lt;/P&gt;&lt;P&gt;if _N_ = &lt;STRONG&gt;1&lt;/STRONG&gt; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if &lt;STRONG&gt;0&lt;/STRONG&gt; then set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash h(dataset: "have",multidata: 'y');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.defineKey('pid');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.defineData('StartDate','drug');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.defineDone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length _t $&lt;STRONG&gt;500&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have(rename=(startdate=_startdate drug=_drug));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by pid;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array t(*) $&lt;STRONG&gt;100&lt;/STRONG&gt; reg1-reg&amp;amp;reg_limit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain _t t;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.pid then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call missing(of t(*),_t);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _count=&lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _count+&lt;STRONG&gt;1&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(_count)=_drug;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _n=&lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do while(h.do_over(key: pid) eq &lt;STRONG&gt;0&lt;/STRONG&gt;);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k=intck('day', _startdate, startdate);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if k&amp;lt;=&lt;STRONG&gt;10&lt;/STRONG&gt; and drug ne _drug then&amp;nbsp; f=&lt;STRONG&gt;1&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else f=&lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if f=&lt;STRONG&gt;1&lt;/STRONG&gt; then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _n+&lt;STRONG&gt;1&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n=&lt;STRONG&gt;1&lt;/STRONG&gt; then&amp;nbsp; t(_count)=catx('+', _drug, drug);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if countc(strip(_t), strip(drug))=&lt;STRONG&gt;0&lt;/STRONG&gt; then&amp;nbsp;&amp;nbsp; t(_count)=catx('+', t(_count), drug);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _t=cats(of t(*));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _t=cats(of t(*));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; check=countc(strip(_t), strip(_drug));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if countc(strip(_t), strip(_drug))=&lt;STRONG&gt;0&lt;/STRONG&gt; then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _count+&lt;STRONG&gt;1&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(_count)=_drug;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do while(h.do_over(key: pid) eq &lt;STRONG&gt;0&lt;/STRONG&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if intnx('day', _startdate, -&lt;STRONG&gt;3&lt;/STRONG&gt;)&amp;lt;=startdate&amp;lt;=intnx('day', _startdate, &lt;STRONG&gt;10&lt;/STRONG&gt;) and drug ne _drug&amp;nbsp; then t(_count)=catx('+', t(_count), drug);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _t=cats(of t(*));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last.pid then output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep pid reg: ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 06 Jan 2018 01:18:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425471#M281129</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-01-06T01:18:10Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425474#M281130</link>
      <description>Thank you very much for you help and also for sharing your expertise.&lt;BR /&gt;</description>
      <pubDate>Sat, 06 Jan 2018 01:31:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425474#M281130</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-06T01:31:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425475#M281131</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/110575"&gt;@shasank&lt;/a&gt;&amp;nbsp;No worries. I know where to shorten my code, remove flag variables and make it a touch more classy and neat. I am too &lt;STRONG&gt;tired&lt;/STRONG&gt; for anything now as I had classes all day. Since I saw your repeated requests mentioning every super user/proc star in the morning till afternoon and a new thread with the same question of course with good effort in explaining the requirement, I was emotionally moved to help. So I did after coming back from class.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Either way, I am gonna go home now and sleep. I'll see if I can clean the code and add some comments tomorrow if I don't have much of my own homework. Take care and good night!&lt;/P&gt;</description>
      <pubDate>Sat, 06 Jan 2018 01:46:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425475#M281131</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-01-06T01:46:11Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425477#M281132</link>
      <description>Thank you Soo much.&lt;BR /&gt;</description>
      <pubDate>Sat, 06 Jan 2018 01:49:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425477#M281132</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-06T01:49:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425494#M281133</link>
      <description>&lt;P&gt;This would seem to adhere to your requirements, even if the results differ slightly from prescribed:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input PID StartDate :anydtdte. Drug $;
format startDate yymmdd10.;
datalines; 
1 9-May-12 A 
1 10-May-12 A 
1 10-May-12 B 
1 30-May-12 B 
1 31-May-12 A 
1 1-Jun-12 A 
1 2-Jun-12 B 
1 30-Jun-12 C 
1 3-Jul-12 A 
1 27-Jul-12 A 
1 28-Jul-12 D 
2 17-May-12 A 
2 22-May-12 B 
2 25-May-12 B 
2 1-Jun-12 C 
2 2-Jun-12 D 
2 3-Jun-12 B 
3 26-Jun-12 A 
3 29-Jun-12 A 
3 27-Jul-12 B 
3 25-Aug-12 B 
4 26-Jun-12 A 
4 27-Jun-12 B 
4 28-Jun-12 C 
4 25-Aug-12 A 
4 26-Aug-12 B 
4 27-Aug-12 B 
;

proc sql;
create table c as
select
    a.pid, a.startDate,
    b.drug
from
    have as a inner join
    have as b on a.pid=b.pid and 
        intck("day", a.startDate, b.startDate) between -3 and 10
order by pid, startDate, drug;
quit;

data d;
length regimen $100;
do until(last.startDate);
    set c; by pid startDate drug;
    if first.drug then regimen = catx("+", regimen, drug);
    end;
drop drug;
run;

proc sort data=d out=e nodupkey; by pid regimen; run;

proc transpose data=e out=want(drop=_name_) prefix=regimen;
by pid;
var regimen;
run;

proc print data=want noobs; run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;                      PID    regimen1    regimen2    regimen3

                       1       A+B        A+C         A+D
                       2       A+B        B+C         B+C+D
                       3       A          B
                       4       A+B        A+B+C
&lt;/PRE&gt;</description>
      <pubDate>Sat, 06 Jan 2018 06:46:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425494#M281133</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2018-01-06T06:46:48Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425525#M281134</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/110575"&gt;@shasank&lt;/a&gt; wrote:&lt;BR /&gt;Hi Reeza,&lt;BR /&gt;That was a typo. This is the syntax I used.&lt;BR /&gt;data firstchem;&lt;BR /&gt;set b;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;by ID Drug;&lt;BR /&gt;if first.id and First.drug then output;&lt;BR /&gt;Firstdate = startdate;&lt;BR /&gt;drop startdate;&lt;BR /&gt;run;&lt;BR /&gt;Yet I get same missing&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Your use of the FIRST. variables does not look correct.&amp;nbsp; Note that FIRST.ID will be true only once per ID value.&amp;nbsp; Also note that FIRST.DRUG will always be true when FIRST.ID is true.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also why are you writing the observation before setting the value for FIRSTDATE?&lt;/P&gt;
&lt;P&gt;Did you mean something like this?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data firstchem;
  set b;
  by ID Drug;
  if first.drug ;
  keep id drug startdate;
  rename startdate=Firstdate ;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 06 Jan 2018 16:49:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425525#M281134</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-01-06T16:49:53Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425844#M281135</link>
      <description>Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/14779"&gt;@PG&lt;/a&gt; stats,&lt;BR /&gt;Thank you for your valuable time and expertise.&lt;BR /&gt;Your solution matched output for PID 1 and 3 but not for 2 and 4.&lt;BR /&gt;for PID 2 the Regimen 1 is 1st drug + drugs given in 10 days = A + B.&lt;BR /&gt;Regimen 2 creation should be initiated by presence of a drug not A or B (I:e not in Regimen1) . C was started on 1-Jun-12. So, Surveillance period start is Newdrug - 3 to newdrug + 10 - 27-May-12 to 11-Jun-12. The drugs given in this period were B+C+D. As there are no drugs given beyond this point Regimen3 should be missing.&lt;BR /&gt;The logic is to only create a new regimen when there a new drug given to the person which is not in Regimen(i)-1 or the previous regimen. Hop[e this makes sense.</description>
      <pubDate>Mon, 08 Jan 2018 17:59:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425844#M281135</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-08T17:59:11Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425896#M281136</link>
      <description>&lt;P&gt;HI&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;&amp;nbsp;,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for your reply and I have been trying on your code and making small changes to make it work for me but the code doesn't seem to work my actual data. I donot understand why.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the raw data which is de-identified&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
    input PID StartDate :anydtdte. Drug $;
    format startDate yymmdd10.;
    datalines;
1 10MAY2012 arb
1 10MAY2012 acl
1 17MAY2012 arb
1 17MAY2012 acl
1 30MAY2012 rlo
1 30MAY2012 rlo
1 30MAY2012 rlo
1 26JUN2012 rlo
1 19JUL2012 rlo
1 27AUG2012 rlo
1 25SEP2012 rlo
2 19FEB2008 eva
2 19FEB2008 eva
2 19FEB2008 arb
2 19FEB2008 arb
2 19FEB2008 emc
2 28FEB2010 ymc
3 09NOV2011 isp
3 27NOV2011 emc
;
run;

proc sort data=have;
    by PID Startdate Drug;
run;

proc sql;
    select count(distinct Drug) into : reg_limit TRIMMED from have;
quit;

%put &amp;amp;reg_limit;

data want2;
    if _N_=1 then
        do;

            if 0 then
                set have;
            declare hash h(dataset: "have", multidata: 'y');
            h.defineKey('pid');
            h.defineData('StartDate', 'drug');
            h.defineDone();
        end;
    length _t $500;
    set have(rename=(startdate=_startdate drug=_drug));
    by pid;
    array t(*) $100 Line1-Line&amp;amp;reg_limit;
    retain _t t;

    if first.pid then
        do;
            call missing(of t(*), _t);
            _count=0;
            _count+1;
            t(_count)=_drug;
            _n=0;

            do while(h.do_over(key: pid) eq 0);
                k=intck('day', _startdate, startdate);

                if k&amp;lt;=10 and drug ne _drug then
                    f=1;
                else
                    f=0;

                if f=1 then
                    do;
                        _n+1;

                        if _n=1 then
                            t(_count)=catx('+', _drug, drug);
                        else if countc(strip(_t), strip(drug))=0 then
                            t(_count)=catx('+', t(_count), drug);
                    end;
                _t=cats(of t(*));
                *output;
            end;
            _t=cats(of t(*));
        end;
    else
        do;
            check=countc(strip(_t), strip(_drug));

            if countc(strip(_t), strip(_drug))=0 then
                do;
                    _count+1;
                    t(_count)=_drug;

                    do while(h.do_over(key: pid) eq 0);

                        if intnx('day', _startdate, -3)&amp;lt;=startdate&amp;lt;=intnx('day', _startdate, 10) 
                            and drug ne _drug then
                                t(_count)=catx('+', t(_count), drug);
                        _t=cats(of t(*));
                        *output;
                    end;
                end;
        end;

    if last.pid then
        output;
    keep pid Line:;
run;

/////***********************************************************//////&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;This data doesn't seem to yield the same result as expected from the model dataset I have posted before. Can you let me know why is that happening.&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;If you observe the below output I renamed Reg to line. The drug rlo is not coming up under line2/reg2 for PID 1 ans same goes for PID 2&lt;/P&gt;
&lt;P&gt;This is the output I get is below:&lt;/P&gt;
&lt;P&gt;Please suggest.&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="image.png" style="width: 600px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/17708iF9C37F9BE5CEBE73/image-size/large?v=v2&amp;amp;px=999" role="button" title="image.png" alt="image.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 08 Jan 2018 21:10:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425896#M281136</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-08T21:10:49Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425913#M281137</link>
      <description>Your posted code was garbled in the post, please modify it.</description>
      <pubDate>Mon, 08 Jan 2018 21:05:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425913#M281137</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-08T21:05:02Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425914#M281138</link>
      <description>Hi Reeza,&lt;BR /&gt;&lt;BR /&gt;Here is the edited post. I hope this is clear.</description>
      <pubDate>Mon, 08 Jan 2018 21:09:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425914#M281138</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-08T21:09:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425915#M281139</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/110575"&gt;@shasank&lt;/a&gt;&amp;nbsp;I edited it to make it back into the code editor and formatted it.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regarding your question, check that your variable types and lengths are the same as what you get in the sample data you provided. Essentially, there's a difference in the source data, since only you have the source data, it's harder for us to say how it's different.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PS. I did edit this post to add some content.&lt;/P&gt;</description>
      <pubDate>Mon, 08 Jan 2018 21:12:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425915#M281139</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-08T21:12:30Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425920#M281140</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/110575"&gt;@shasank&lt;/a&gt;&amp;nbsp;I'm afraid Mon, Tue and Wed are very busy with my full time classes so I can only help perhaps on Thu. I will try to modify if I get some long breaks in between classes. You might wonder then how come I participate in the forum if I have classes. And that's only because if it's too easy i tend to jump in.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 08 Jan 2018 21:16:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425920#M281140</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-01-08T21:16:05Z</dc:date>
    </item>
    <item>
      <title>Re: How to identify a change across observations and flag it to create a new variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425921#M281141</link>
      <description>Hi Reeza,&lt;BR /&gt;&lt;BR /&gt;Thank you for your reply. I did anticipate this situation which is why I have posted this code with a new similar dataset and not the old one. The code seems to be working fine with the old dataset but this not with new similar data set.</description>
      <pubDate>Mon, 08 Jan 2018 21:18:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-a-change-across-observations-and-flag-it-to/m-p/425921#M281141</guid>
      <dc:creator>shasank</dc:creator>
      <dc:date>2018-01-08T21:18:35Z</dc:date>
    </item>
  </channel>
</rss>

