<?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: SAS Date Tracking in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463503#M118093</link>
    <description>&lt;P&gt;Your question is very complicated. I would not expect my code work for all your situations.&lt;/P&gt;
&lt;P&gt;You are on your own .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input (Cust_NO number  Amount ) (: $20.) (Issue_Date  Maturity_Date) (: date9.)  ;
format Issue_Date  Maturity_Date date9.;
cards;
B           1   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll over
B           2   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll Over
B           3   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 1
B           4   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 2
B           5   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 3
B           6   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 4
A           1   20000   29-Sep-16   28-Oct-16                             24-Apr-17   Roll over
A           2   20000   28-Oct-16   28-Nov-16                                            .   Roll over from 1
A           3   20000   28-Oct-16   28-Nov-16                            28-Nov-16   Distinct Transaction
A           4   20000   28-Nov-16   29-Dec-16                                          .   Roll over from 2
A           5   20000   29-Dec-16   27-Jan-17                                          .   Roll over from 4
A           6   20000   26-Jan-17   27-Feb-17                                          .   Roll over from 5
A           7   20000   27-Feb-17   24-Mar-17                                         .   Roll over from 6
A           8   20000   24-Mar-17   24-Apr-17   
;
run;
data temp;
 set have;
 by Cust_NO Issue_Date  Maturity_Date notsorted;
 if first.Maturity_Date then group=0;
 group+1;
run;
data first others;
 set temp;
 if group=1 then output first;
  else output others;
 run;
 
 data _first;
  if _n_=1 then do;
   if 0 then set first(rename=(Maturity_Date=_Maturity_Date));
   declare hash h(dataset:'first(rename=(Maturity_Date=_Maturity_Date))');
   h.definekey('Cust_NO','Issue_Date');
   h.definedata('_Maturity_Date');
   h.definedone();  
  end;
 set first;
 call missing(_Maturity_Date);
 k=Maturity_Date;rc=h.find(key:Cust_NO,key:k);
 if rc ne 0 then do;k=Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 do while(rc=0);
   h.remove(key:Cust_NO,key:k);
   k=_Maturity_Date;
   rc=h.find(key:Cust_NO,key:k);
   if rc ne 0 then do;k=_Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 end;
 drop group k rc;
 run;
 proc sort data=have;by Cust_NO Issue_Date Maturity_Date;run;
 proc sort data=_first;by Cust_NO Issue_Date Maturity_Date;run;
 data x;
  inb=0;
  merge have _first(keep=Cust_NO Issue_Date Maturity_Date _Maturity_Date in=inb);
  by Cust_NO Issue_Date Maturity_Date;
  flag=inb;
 run;
 proc sql;
 create table x1 as
  select *,sum(flag=0) as yes
   from x
    group by Cust_NO
      order by Cust_NO,Issue_Date,Maturity_Date;
quit;
data want;
 set x1;
 if yes=1 and flag=0 then _Maturity_Date=Maturity_Date;
 drop flag yes;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sat, 19 May 2018 12:36:07 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2018-05-19T12:36:07Z</dc:date>
    <item>
      <title>SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463299#M118019</link>
      <description>&lt;P&gt;I have the following data set, which i wish to get the final maturity date (maturity_Date_1) for the roll over transaction(condition-&amp;nbsp; if (maturity date - subsequent issue date) fell between 0 and 1, then considered as roll over transaction).I have been struggling for sometimes, but still not able to come up with the codes. Is it possible to use lag function and Do looping ?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please advise how to write the coding in SAS to obtain the final maturity date (Maturity Date_1) from maturity date for all customers. Remarks is not as port of the output.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Cust_NO number&amp;nbsp; Amount&amp;nbsp; Issue_Date&amp;nbsp; Maturity_Date&amp;nbsp;&amp;nbsp; Maturity_date_1 Remarks&lt;/P&gt;&lt;P&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 10000&amp;nbsp;&amp;nbsp; 08-Sep-14&amp;nbsp;&amp;nbsp; 08-Dec-14&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;08-Jun-15&amp;nbsp;&amp;nbsp; Roll over&lt;/P&gt;&lt;P&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 10000&amp;nbsp;&amp;nbsp; 08-Sep-14&amp;nbsp;&amp;nbsp; 08-Dec-14&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;08-Jun-15&amp;nbsp;&amp;nbsp; Roll Over&lt;/P&gt;&lt;P&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 &amp;nbsp;&amp;nbsp;10000&amp;nbsp;&amp;nbsp; 08-Dec-14&amp;nbsp;&amp;nbsp; 09-Mar-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 1&lt;/P&gt;&lt;P&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; 10000&amp;nbsp;&amp;nbsp; 08-Dec-14&amp;nbsp;&amp;nbsp; 09-Mar-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 2&lt;/P&gt;&lt;P&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 10000&amp;nbsp;&amp;nbsp; 09-Mar-15&amp;nbsp;&amp;nbsp; 08-Jun-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 3&lt;/P&gt;&lt;P&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp; &amp;nbsp;10000&amp;nbsp;&amp;nbsp; 09-Mar-15&amp;nbsp;&amp;nbsp; 08-Jun-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 4&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 29-Sep-16&amp;nbsp;&amp;nbsp; 28-Oct-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;24-Apr-17&amp;nbsp;&amp;nbsp; Roll over&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 28-Oct-16&amp;nbsp;&amp;nbsp; 28-Nov-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 1&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp; 20000&amp;nbsp; &amp;nbsp;28-Oct-16&amp;nbsp;&amp;nbsp; 28-Nov-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 28-Nov-16&amp;nbsp;&amp;nbsp; Distinct Transaction&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 28-Nov-16&amp;nbsp;&amp;nbsp; 29-Dec-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 2&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 29-Dec-16&amp;nbsp;&amp;nbsp; 27-Jan-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 4&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 26-Jan-17&amp;nbsp;&amp;nbsp; 27-Feb-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 5&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 27-Feb-17&amp;nbsp;&amp;nbsp; 24-Mar-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&amp;nbsp;&amp;nbsp; Roll over from 6&lt;/P&gt;&lt;P&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp; 20000&amp;nbsp;&amp;nbsp; 24-Mar-17&amp;nbsp;&amp;nbsp; 24-Apr-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp;&amp;nbsp; Roll over from 7&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Fri, 18 May 2018 12:43:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463299#M118019</guid>
      <dc:creator>Daniel_Tan</dc:creator>
      <dc:date>2018-05-18T12:43:03Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463367#M118048</link>
      <description>&lt;P&gt;That is really uneasy task , you need consider many different scenarios .&lt;/P&gt;
&lt;P&gt;Assuming there are at most two obs in the same&amp;nbsp;Cust_NO and&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;Issue_Date.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Good Luck.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input (Cust_NO number  Amount ) (: $20.) (Issue_Date  Maturity_Date) (: date9.)  ;
format Issue_Date  Maturity_Date date9.;
cards;
B           1   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll over
B           2   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll Over
B           3   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 1
B           4   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 2
B           5   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 3
B           6   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 4
A           1   20000   29-Sep-16   28-Oct-16                             24-Apr-17   Roll over
A           2   20000   28-Oct-16   28-Nov-16                                            .   Roll over from 1
A           3   20000   28-Oct-16   28-Nov-16                            28-Nov-16   Distinct Transaction
A           4   20000   28-Nov-16   29-Dec-16                                          .   Roll over from 2
A           5   20000   29-Dec-16   27-Jan-17                                          .   Roll over from 4
A           6   20000   26-Jan-17   27-Feb-17                                          .   Roll over from 5
A           7   20000   27-Feb-17   24-Mar-17                                         .   Roll over from 6
A           8   20000   24-Mar-17   24-Apr-17   
;
run;
data temp;
 set have;
 by Cust_NO Issue_Date  Maturity_Date notsorted;
 if first.Maturity_Date then group=0;
 group+1;
run;
data first second;
 set temp;
 if group=1 then output first;
  else output second;
 run;
 
 data _first;
  if _n_=1 then do;
   if 0 then set first(rename=(Maturity_Date=_Maturity_Date));
   declare hash h(dataset:'first(rename=(Maturity_Date=_Maturity_Date))');
   h.definekey('Cust_NO','Issue_Date');
   h.definedata('_Maturity_Date');
   h.definedone();  
  end;
 set first;
 call missing(_Maturity_Date);
 k=Maturity_Date;rc=h.find(key:Cust_NO,key:k);
 if rc ne 0 then do;k=Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 do while(rc=0);
   h.remove(key:Cust_NO,key:k);
   k=_Maturity_Date;
   rc=h.find(key:Cust_NO,key:k);
   if rc ne 0 then do;k=_Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 end;
 drop group k rc;
 run;
 
 
  data _second;
  if _n_=1 then do;
   if 0 then set second(rename=(Maturity_Date=_Maturity_Date));
   declare hash h(dataset:'second(rename=(Maturity_Date=_Maturity_Date))');
   h.definekey('Cust_NO','Issue_Date');
   h.definedata('_Maturity_Date');
   h.definedone();
  end;
 set second;
 call missing(_Maturity_Date);
 k=Maturity_Date;rc=h.find(key:Cust_NO,key:k);
 if rc ne 0 then do;k=Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 do while(rc=0);
   h.remove(key:Cust_NO,key:k);
   k=_Maturity_Date;
   rc=h.find(key:Cust_NO,key:k);
   if rc ne 0 then do;k=_Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 end;
 drop group k rc;
 run;
 proc sort data=_first;by Cust_NO number;run;
 proc sort data=_second;by Cust_NO number;run;
 data want;
  set _first(in=ina) _second(in=inb);
  by Cust_NO number;
  a=ina;b=inb;
 run;
 
 proc print noobs;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;&lt;/P&gt;</description>
      <pubDate>Fri, 18 May 2018 15:07:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463367#M118048</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-05-18T15:07:05Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463479#M118082</link>
      <description>&lt;P&gt;Hi Ksharp,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For Cust_No A with Number 3, the expected maturity date should be 28-Nov-2016 (instead of missing) as this is a distinct transaction.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Need your advice on the followings:-&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1). Is it possible to us lag function and do looping to perform the task ?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;example :-&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Uniqkey=cats(Cus_No,Amount);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data Want;&lt;/P&gt;&lt;P&gt;Set Have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;by uniqkey;&lt;BR /&gt;&lt;BR /&gt;if first.unikey then do;&lt;BR /&gt;issue_date1=Issue_date;&lt;BR /&gt;Differ=0;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do i=2 to _N_;&lt;BR /&gt;do j=i-1&amp;nbsp; to 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lagj(differ)=0 or lagj(differ)=1)and (issue_Date-lagj(maturity_Date) = 1 or issue_Date-lagj(maturity_Date)= 0) then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;issue_date1=lagj(Issue_date);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Differ=issue_Date-lagj(maturity_Date);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2). Presume the roll over transactions is 3, then i have to create 3 data sets to perform the task?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your help.&lt;/P&gt;</description>
      <pubDate>Sat, 19 May 2018 02:53:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463479#M118082</guid>
      <dc:creator>Daniel_Tan</dc:creator>
      <dc:date>2018-05-19T02:53:08Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463503#M118093</link>
      <description>&lt;P&gt;Your question is very complicated. I would not expect my code work for all your situations.&lt;/P&gt;
&lt;P&gt;You are on your own .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input (Cust_NO number  Amount ) (: $20.) (Issue_Date  Maturity_Date) (: date9.)  ;
format Issue_Date  Maturity_Date date9.;
cards;
B           1   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll over
B           2   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll Over
B           3   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 1
B           4   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 2
B           5   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 3
B           6   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 4
A           1   20000   29-Sep-16   28-Oct-16                             24-Apr-17   Roll over
A           2   20000   28-Oct-16   28-Nov-16                                            .   Roll over from 1
A           3   20000   28-Oct-16   28-Nov-16                            28-Nov-16   Distinct Transaction
A           4   20000   28-Nov-16   29-Dec-16                                          .   Roll over from 2
A           5   20000   29-Dec-16   27-Jan-17                                          .   Roll over from 4
A           6   20000   26-Jan-17   27-Feb-17                                          .   Roll over from 5
A           7   20000   27-Feb-17   24-Mar-17                                         .   Roll over from 6
A           8   20000   24-Mar-17   24-Apr-17   
;
run;
data temp;
 set have;
 by Cust_NO Issue_Date  Maturity_Date notsorted;
 if first.Maturity_Date then group=0;
 group+1;
run;
data first others;
 set temp;
 if group=1 then output first;
  else output others;
 run;
 
 data _first;
  if _n_=1 then do;
   if 0 then set first(rename=(Maturity_Date=_Maturity_Date));
   declare hash h(dataset:'first(rename=(Maturity_Date=_Maturity_Date))');
   h.definekey('Cust_NO','Issue_Date');
   h.definedata('_Maturity_Date');
   h.definedone();  
  end;
 set first;
 call missing(_Maturity_Date);
 k=Maturity_Date;rc=h.find(key:Cust_NO,key:k);
 if rc ne 0 then do;k=Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 do while(rc=0);
   h.remove(key:Cust_NO,key:k);
   k=_Maturity_Date;
   rc=h.find(key:Cust_NO,key:k);
   if rc ne 0 then do;k=_Maturity_Date-1; rc=h.find(key:Cust_NO,key:k);end;
 end;
 drop group k rc;
 run;
 proc sort data=have;by Cust_NO Issue_Date Maturity_Date;run;
 proc sort data=_first;by Cust_NO Issue_Date Maturity_Date;run;
 data x;
  inb=0;
  merge have _first(keep=Cust_NO Issue_Date Maturity_Date _Maturity_Date in=inb);
  by Cust_NO Issue_Date Maturity_Date;
  flag=inb;
 run;
 proc sql;
 create table x1 as
  select *,sum(flag=0) as yes
   from x
    group by Cust_NO
      order by Cust_NO,Issue_Date,Maturity_Date;
quit;
data want;
 set x1;
 if yes=1 and flag=0 then _Maturity_Date=Maturity_Date;
 drop flag yes;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 19 May 2018 12:36:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463503#M118093</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-05-19T12:36:07Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463505#M118095</link>
      <description>&lt;P&gt;1) Sorry. I have no time to check your code ,and have no idea about it.&lt;/P&gt;
&lt;P&gt;2)I changed my code, should cover two more obs in the same group .&lt;/P&gt;</description>
      <pubDate>Sat, 19 May 2018 12:39:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463505#M118095</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-05-19T12:39:06Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463600#M118135</link>
      <description>Thank you very much.</description>
      <pubDate>Sun, 20 May 2018 03:39:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463600#M118135</guid>
      <dc:creator>Daniel_Tan</dc:creator>
      <dc:date>2018-05-20T03:39:39Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463631#M118144</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Here is the fixed code, Maybe you should try it .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input (Cust_NO number  Amount ) (: $20.) (Issue_Date  Maturity_Date) (: date9.)  ;
format Issue_Date  Maturity_Date date9.;
cards;
B           1   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll over
B           2   10000   08-Sep-14   08-Dec-14                             08-Jun-15   Roll Over
B           3   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 1
B           4   10000   08-Dec-14   09-Mar-15                                            .   Roll over from 2
B           5   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 3
B           6   10000   09-Mar-15   08-Jun-15                                            .   Roll over from 4
A           1   20000   29-Sep-16   28-Oct-16                             24-Apr-17   Roll over
A           2   20000   28-Oct-16   28-Nov-16                                            .   Roll over from 1
A           3   20000   28-Oct-16   28-Nov-16                            28-Nov-16   Distinct Transaction
A           4   20000   28-Nov-16   29-Dec-16                                          .   Roll over from 2
A           5   20000   29-Dec-16   27-Jan-17                                          .   Roll over from 4
A           6   20000   26-Jan-17   27-Feb-17                                          .   Roll over from 5
A           7   20000   27-Feb-17   24-Mar-17                                         .   Roll over from 6
A           8   20000   24-Mar-17   24-Apr-17   
;
run;

 data temp;
  if _n_=1 then do;
   if 0 then set have(rename=(Maturity_Date=_Maturity_Date));
   declare hash h(dataset:'have(rename=(Maturity_Date=_Maturity_Date))',multidata:'y');
   h.definekey('Cust_NO','Issue_Date');
   h.definedata('Cust_NO','_Maturity_Date');
   h.definedone();  
  end;
 set have end=last;
 call missing(_Maturity_Date);
 k=Maturity_Date;rc=h.find(key:Cust_NO,key:k);
 if rc=0 then h.removedup(key:Cust_NO,key:k);

 if rc ne 0 then do;
   k=Maturity_Date-1; 
   rc=h.find(key:Cust_NO,key:k);
   if rc=0 then h.removedup(key:Cust_NO,key:k);
 end;
 do while(rc=0);
   if h.check()=0 then h.removedup();
   k=_Maturity_Date;
   rc=h.find(key:Cust_NO,key:k);
   if rc=0 then h.removedup(key:Cust_NO,key:k);
   if rc ne 0 then do;
     k=_Maturity_Date-1; 
     rc=h.find(key:Cust_NO,key:k);
     if rc=0 then h.removedup(key:Cust_NO,key:k);
   end;
 end;
 if last then h.output(dataset:'rest');
 drop  k rc ;
 run;
 proc sort data=temp;by Cust_NO Maturity_Date;run;
 proc sort data=rest;by Cust_NO _Maturity_Date;run;
 data want;
  inb=0;
  merge temp rest(in=inb rename=(_Maturity_Date=Maturity_Date));
  by Cust_NO Maturity_Date;
  if inb then _Maturity_Date=Maturity_Date;
 run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 20 May 2018 11:56:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/463631#M118144</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-05-20T11:56:04Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Date Tracking</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/464097#M118321</link>
      <description>&lt;P&gt;Thank you very much for your help&lt;/P&gt;</description>
      <pubDate>Tue, 22 May 2018 15:23:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Date-Tracking/m-p/464097#M118321</guid>
      <dc:creator>Daniel_Tan</dc:creator>
      <dc:date>2018-05-22T15:23:40Z</dc:date>
    </item>
  </channel>
</rss>

