<?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: Determining rereferral vs. follow-up-Determining if you should keep the lag date or the current in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Determining-rereferral-vs-follow-up-Determining-if-you-should/m-p/814724#M321591</link>
    <description>&lt;P&gt;Two issues, first minor: your ID variable in the Example data needs to be read as character.&lt;/P&gt;
&lt;P&gt;Second, and a bit more worrisome is your &lt;STRONG&gt;lag(patient_id_number)&lt;/STRONG&gt; . Your example data does not have a "patient_id_number" variable so your condition is never going to be true. Also, LAG after an IF seldom works as expected because of the queue nature of the Lag and Dif functions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This does what I think you are asking:&lt;/P&gt;
&lt;PRE&gt;data example;
input id $ date date9. ;
format date date9.;
datalines;
JS6749 15mar2019
JS6749 15Jun2020
JS6749 01Jul2020
JS6749 15Jul2020
JS6749 01Aug2020
JS6749 30Jan2021
JS4524 15May2020
JS4524 30May2020
JS4524 01Jun2020
JS4524 10Jun2020
;
run;

data want;
   set example;
   by notsorted id;
   retain newdate;
   numdays= dif(date);
   if first.id then do;
      numdays=.;
      newdate= date;
   end;
   format newdate mmddyy10.;
   if numdays&amp;gt;30 then newdate=date;
run; &lt;/PRE&gt;
&lt;P&gt;When you use BY statement then SAS supplies automatic variables that indicate whether the current record is the first or last of the group. These are accessed using FIRST.variable and LAST.variable, they are numeric 1/0 which SAS uses for true/false so you can do things conditionally. The BY statement requires data to be sorted by default, your example data wasn't so the NOTSORTED option works with the example and expects data to be grouped by ID.&lt;/P&gt;
&lt;P&gt;RETAIN will keep the values of a variable across the data step boundary. So you don't need all the If Lag values to reset.&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/384582"&gt;@casmcfarland&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;I am trying to write code that pulls in data related to a program where kids receive services. If the time between services is 30 days or less than it is a follow-up, but if it is over 30 days it is a re-referral. I am trying to keep only the first date of referral and re-referral dates and not any of the follow-up dates.&lt;/P&gt;
&lt;P&gt;Here are my data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data example;&lt;BR /&gt;input id date date9. ;&lt;BR /&gt;datalines;&lt;BR /&gt;JS6749 15mar2019&lt;BR /&gt;JS6749 15Jun2020&lt;BR /&gt;JS6749 01Jul2020&lt;BR /&gt;JS6749 15Jul2020&lt;BR /&gt;JS6749 01Aug2020&lt;BR /&gt;JS6749 30Jan2021&lt;BR /&gt;JS4524 15May2020&lt;BR /&gt;JS4524 30May2020&lt;BR /&gt;JS4524 01Jun2020&lt;BR /&gt;JS4524 10Jun2020&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*code I have so far that does not work to keep the correct dates*/&lt;BR /&gt;data fixcode (keep=id date numdays newdate);&lt;BR /&gt;set example;&lt;BR /&gt;if id = lag(patient_id_number)then do&lt;BR /&gt;numdays=date-lag(date);&lt;BR /&gt;if numdays&amp;gt;30 then newdate=date; else newdate=lag(date);&lt;BR /&gt;end;&lt;BR /&gt;if id ne lag(id) then newdate=date;&lt;BR /&gt;format newdate mmddyy10.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*What I want the date to look like when I am done*/&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;ID&lt;/TD&gt;
&lt;TD&gt;date&lt;/TD&gt;
&lt;TD&gt;numdays&lt;/TD&gt;
&lt;TD&gt;newdate&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;15-Mar-2019&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;3/15/2019&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;15-Jun-2020&lt;/TD&gt;
&lt;TD&gt;458&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;1-Jul-2020&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;15-Jul-2020&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;1-Aug-2020&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;30-Jan-2021&lt;/TD&gt;
&lt;TD&gt;182&lt;/TD&gt;
&lt;TD&gt;1/30/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;15-May-2020&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;30-May-2020&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;1-Jun-2020&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;10-Jun-2020&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 23 May 2022 15:25:21 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2022-05-23T15:25:21Z</dc:date>
    <item>
      <title>Determining rereferral vs. follow-up-Determining if you should keep the lag date or the current date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Determining-rereferral-vs-follow-up-Determining-if-you-should/m-p/814715#M321585</link>
      <description>&lt;P&gt;I am trying to write code that pulls in data related to a program where kids receive services. If the time between services is 30 days or less than it is a follow-up, but if it is over 30 days it is a re-referral. I am trying to keep only the first date of referral and re-referral dates and not any of the follow-up dates.&lt;/P&gt;&lt;P&gt;Here are my data:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data example;&lt;BR /&gt;input id date date9. ;&lt;BR /&gt;datalines;&lt;BR /&gt;JS6749 15mar2019&lt;BR /&gt;JS6749 15Jun2020&lt;BR /&gt;JS6749 01Jul2020&lt;BR /&gt;JS6749 15Jul2020&lt;BR /&gt;JS6749 01Aug2020&lt;BR /&gt;JS6749 30Jan2021&lt;BR /&gt;JS4524 15May2020&lt;BR /&gt;JS4524 30May2020&lt;BR /&gt;JS4524 01Jun2020&lt;BR /&gt;JS4524 10Jun2020&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/*code I have so far that does not work to keep the correct dates*/&lt;BR /&gt;data fixcode (keep=id date numdays newdate);&lt;BR /&gt;set example;&lt;BR /&gt;if id = lag(patient_id_number)then do&lt;BR /&gt;numdays=date-lag(date);&lt;BR /&gt;if numdays&amp;gt;30 then newdate=date; else newdate=lag(date);&lt;BR /&gt;end;&lt;BR /&gt;if id ne lag(id) then newdate=date;&lt;BR /&gt;format newdate mmddyy10.;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/*What I want the date to look like when I am done*/&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;TD&gt;numdays&lt;/TD&gt;&lt;TD&gt;newdate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS6749&lt;/TD&gt;&lt;TD&gt;15-Mar-2019&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;3/15/2019&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS6749&lt;/TD&gt;&lt;TD&gt;15-Jun-2020&lt;/TD&gt;&lt;TD&gt;458&lt;/TD&gt;&lt;TD&gt;6/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS6749&lt;/TD&gt;&lt;TD&gt;1-Jul-2020&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;6/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS6749&lt;/TD&gt;&lt;TD&gt;15-Jul-2020&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;6/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS6749&lt;/TD&gt;&lt;TD&gt;1-Aug-2020&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;6/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS6749&lt;/TD&gt;&lt;TD&gt;30-Jan-2021&lt;/TD&gt;&lt;TD&gt;182&lt;/TD&gt;&lt;TD&gt;1/30/2021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS4524&lt;/TD&gt;&lt;TD&gt;15-May-2020&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;5/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS4524&lt;/TD&gt;&lt;TD&gt;30-May-2020&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;5/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS4524&lt;/TD&gt;&lt;TD&gt;1-Jun-2020&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;5/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;JS4524&lt;/TD&gt;&lt;TD&gt;10-Jun-2020&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;5/15/2020&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 23 May 2022 14:28:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Determining-rereferral-vs-follow-up-Determining-if-you-should/m-p/814715#M321585</guid>
      <dc:creator>casmcfarland</dc:creator>
      <dc:date>2022-05-23T14:28:44Z</dc:date>
    </item>
    <item>
      <title>Re: Determining rereferral vs. follow-up-Determining if you should keep the lag date or the current</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Determining-rereferral-vs-follow-up-Determining-if-you-should/m-p/814724#M321591</link>
      <description>&lt;P&gt;Two issues, first minor: your ID variable in the Example data needs to be read as character.&lt;/P&gt;
&lt;P&gt;Second, and a bit more worrisome is your &lt;STRONG&gt;lag(patient_id_number)&lt;/STRONG&gt; . Your example data does not have a "patient_id_number" variable so your condition is never going to be true. Also, LAG after an IF seldom works as expected because of the queue nature of the Lag and Dif functions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This does what I think you are asking:&lt;/P&gt;
&lt;PRE&gt;data example;
input id $ date date9. ;
format date date9.;
datalines;
JS6749 15mar2019
JS6749 15Jun2020
JS6749 01Jul2020
JS6749 15Jul2020
JS6749 01Aug2020
JS6749 30Jan2021
JS4524 15May2020
JS4524 30May2020
JS4524 01Jun2020
JS4524 10Jun2020
;
run;

data want;
   set example;
   by notsorted id;
   retain newdate;
   numdays= dif(date);
   if first.id then do;
      numdays=.;
      newdate= date;
   end;
   format newdate mmddyy10.;
   if numdays&amp;gt;30 then newdate=date;
run; &lt;/PRE&gt;
&lt;P&gt;When you use BY statement then SAS supplies automatic variables that indicate whether the current record is the first or last of the group. These are accessed using FIRST.variable and LAST.variable, they are numeric 1/0 which SAS uses for true/false so you can do things conditionally. The BY statement requires data to be sorted by default, your example data wasn't so the NOTSORTED option works with the example and expects data to be grouped by ID.&lt;/P&gt;
&lt;P&gt;RETAIN will keep the values of a variable across the data step boundary. So you don't need all the If Lag values to reset.&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/384582"&gt;@casmcfarland&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;I am trying to write code that pulls in data related to a program where kids receive services. If the time between services is 30 days or less than it is a follow-up, but if it is over 30 days it is a re-referral. I am trying to keep only the first date of referral and re-referral dates and not any of the follow-up dates.&lt;/P&gt;
&lt;P&gt;Here are my data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data example;&lt;BR /&gt;input id date date9. ;&lt;BR /&gt;datalines;&lt;BR /&gt;JS6749 15mar2019&lt;BR /&gt;JS6749 15Jun2020&lt;BR /&gt;JS6749 01Jul2020&lt;BR /&gt;JS6749 15Jul2020&lt;BR /&gt;JS6749 01Aug2020&lt;BR /&gt;JS6749 30Jan2021&lt;BR /&gt;JS4524 15May2020&lt;BR /&gt;JS4524 30May2020&lt;BR /&gt;JS4524 01Jun2020&lt;BR /&gt;JS4524 10Jun2020&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*code I have so far that does not work to keep the correct dates*/&lt;BR /&gt;data fixcode (keep=id date numdays newdate);&lt;BR /&gt;set example;&lt;BR /&gt;if id = lag(patient_id_number)then do&lt;BR /&gt;numdays=date-lag(date);&lt;BR /&gt;if numdays&amp;gt;30 then newdate=date; else newdate=lag(date);&lt;BR /&gt;end;&lt;BR /&gt;if id ne lag(id) then newdate=date;&lt;BR /&gt;format newdate mmddyy10.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*What I want the date to look like when I am done*/&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;ID&lt;/TD&gt;
&lt;TD&gt;date&lt;/TD&gt;
&lt;TD&gt;numdays&lt;/TD&gt;
&lt;TD&gt;newdate&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;15-Mar-2019&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;3/15/2019&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;15-Jun-2020&lt;/TD&gt;
&lt;TD&gt;458&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;1-Jul-2020&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;15-Jul-2020&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;1-Aug-2020&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;6/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS6749&lt;/TD&gt;
&lt;TD&gt;30-Jan-2021&lt;/TD&gt;
&lt;TD&gt;182&lt;/TD&gt;
&lt;TD&gt;1/30/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;15-May-2020&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;30-May-2020&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;1-Jun-2020&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JS4524&lt;/TD&gt;
&lt;TD&gt;10-Jun-2020&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&gt;5/15/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 23 May 2022 15:25:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Determining-rereferral-vs-follow-up-Determining-if-you-should/m-p/814724#M321591</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2022-05-23T15:25:21Z</dc:date>
    </item>
  </channel>
</rss>

