<?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: Difficulty resetting Lag to zero (permanently) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578240#M163953</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;Agreed in more than one sense (see below). I answered the OP question about clearing the lags since this is what the OP had asked for; and I don't think that for problems of this kind using the LAG&lt;EM&gt;n&lt;/EM&gt; function, let alone using multiple queues, is called for.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As to your code, note that though it doesn't use the LAG&lt;EM&gt;n&lt;/EM&gt; function explicitly, it essentially emulates the working of LAG6 by moving all the elements of an artificial queue LAG1-LAG6 upward for every record - which is what LAG6 does behind the scenes (but about an order of magnitude more efficiently - I've tested). The advantage of using your artificial queue is that all of its items are accessible to the PDV, while with LAG6, the only item available is at the head of the queue. (That must be why the OP deemed the use of all the functions LAG1 through LAG6 necessary.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Having said that, your code involves a lot of hard coding - the more, the wider the rolling sum window is. Therefore, the same concept can be expressed terser using an array, e.g. (I've set W=3 to allow at least one BY group be larger than W - otherwise we don't have a good test case):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                       
  input SN $ Name $ Date Count ;  
  informat date anydtdte. ;       
  format date yymm7. ;            
  cards ;                         
11075652  NameA  03/2019  12      
11075652  NameA  04/2019   4      
11075652  NameA  05/2019   3      
11075652  NameA  06/2019   1      
11075652  NameB  05/2019   1      
11075682  NameA  07/2019   1      
11075682  NameC  05/2018   2      
11075682  NameC  06/2018   2      
11075682  NameC  07/2018   2      
11075682  NameC  08/2018   0      
11075682  NameC  09/2018   2      
;                                 
run ;                             
                                  
%let w = 3 ;                      
                                  
data want ;                       
  do until (last.name) ;          
    set have ;                    
    by sn name ;                  
    array cl count lag1-lag&amp;amp;w ;   
    cum_sum = sum (of cl[*]) ;    
    output ;                      
    do _i_ = dim (cl) to 2 by -1 ;
      cl [_i_] = cl [_i_-1] ;     
    end ;                         
  end ;                           
run ;                             
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now, as I've repeatedly stated in the past (including in a similar thread, methinks originated by the same OP in the same vein), the whole idea of computing a rolling sum in a window of size &lt;EM&gt;W&lt;/EM&gt; by calculating all the lags from 1 to &lt;EM&gt;W&lt;/EM&gt; and summing them up is totally misguided. The reason is that to compute a rolling sum, we only need to add the leading item and subtract the item &lt;EM&gt;W&lt;/EM&gt;+1 records back in the file. This way, computing a rolling sum for &lt;EM&gt;W&lt;/EM&gt;=3 and &lt;EM&gt;W&lt;/EM&gt;=100000 is equally efficient, while summing up 3 lag items vs 100000 lag items - not to mention getting them all - is all but. In this case, the leading item is current COUNT, so all we need is the value of COUNT &lt;EM&gt;W&lt;/EM&gt;+1 records back in the file - and that only in the case when the size of the BY group exceeds &lt;EM&gt;W&lt;/EM&gt;+1. That item can be fetched using the LAG&lt;EM&gt;w&lt;/EM&gt; function, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;                                   
  do until (last.name) ;                      
    set have ;                                
    by sn name ;                              
    link lag ;                                
    cum_sum = sum (cum_sum, count, - _sub) ;  
    output ;                                  
  end ;                                       
  count = 0 ;                                 
  do _n_ = 1 to &amp;amp;w + 1 ;                      
    link lag ;                                
  end ;                                       
  return ;                                    
  lag: _sub = sum (lag%eval(&amp;amp;w+1)(count), 0) ;
  return ;                                    
run ;                                         
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;However, again, using the LAG&lt;EM&gt;w&lt;/EM&gt; function here, even just one, is far from optimal since its internal queue needs to be cleared before/after each BY group, which for large &lt;EM&gt;W&lt;/EM&gt; means a lot of overhead. It's much simpler and less onerous to fetch the item &lt;EM&gt;W&lt;/EM&gt;+1 back by using a direct access SET, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop = _:) ;                                
  do _n_ = 1 by 1 until (last.name) ;                  
    set have curobs = q ;                              
    by sn name ;                                       
    if _n_ &amp;gt; &amp;amp;w + 1 then do ;                          
      p = q - (&amp;amp;w + 1) ;                               
      set have (keep=count rename=count=_c) point = p ;
    end ;                                              
    cum_sum = sum (cum_sum, count, - sum (_c, 0)) ;    
    output ;                                           
  end ;                                                
run ;                                                  
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;In principle, there can be situations where we need all the lag values (though I can hardly fancy what for - surely not for computing a rolling sum, as shown above). In this case, using multiple LAG function queues is utterly misguided, too, because a simply array can do much more efficiently:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let w = 3 ;                                                                    
                                                                                
proc sql noprint ;                                                              
  select max (q) into :q from (select count (*) as q from have group sn, name) ;
quit ;                                                                          
                                                                                
data want ;                                                                     
  array q [-&amp;amp;w:&amp;amp;q] _temporary_ ;                                                
  do _n_ = 1 by 1 until (last.name) ;                                           
    set have ;                                                                  
    by sn name ;                                                                
    q[_n_] = count ;                                                            
    array ll lag1-lag&amp;amp;w ;                                                       
    do over ll ;                                                                
      ll = q[_n_-_i_] ;                                                         
    end ;                                                                       
    output ;                                                                    
  end ;                                                                         
run ;                                                                           
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note that by the nature of the algorithm, the array doesn't need to be reinitialized before each BY group because every new BY group just overwrites the requisite number of array items. However, the need to pre-process the input file to size up the array is a bit off-putting. That can be fixed by merely setting the upper bound to something like 1000000 - but that means making the assumption that no by-group is larger. A better solution is using the hash object, as it doesn't require making any assumptions about data as long as memory is plentiful enough for the largest BY-group (though the code gets a little bit more verbose than with the array):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let w = 3 ;                         
                                     
data want (drop = _:) ;              
  if _n_ = 1 then do ;               
    dcl hash h () ;                  
    h.definekey  ("_n_") ;           
    h.definedata ("_c") ;            
    h.definedone () ;                
  end ;                              
  do _n_ = 1 by 1 until (last.name) ;
    set have (rename=count=_c) ;     
    by sn name ;                     
    count = _c ;                     
    h.replace() ;                    
    array v lag1-lag&amp;amp;w ;             
    do over v ;                      
      _c = . ;                       
      _iorc_ = h.find (key:_n_-_i_) ;
      v = _c ;                       
    end ;                            
    output ;                         
  end ;                              
run ;                                
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Here again, by the nature of the algorithm, essentially emulating the array approach by calling the REPLACE method rather than ADD, there's no need to clear the hash for each BY group. If ADD were used, the CLEAR method would have to be called before (or after) the DOW loop. One technical subtlety is that if the FIND method fails when (_n_ - _i_)&amp;nbsp; &amp;lt; 1, _C remains missing, which is what we want. A little bit of efficiency can be added by calling FIND only when&amp;nbsp;(_n_ - _i_)&amp;nbsp; &amp;gt; 0.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 31 Jul 2019 23:03:35 GMT</pubDate>
    <dc:creator>hashman</dc:creator>
    <dc:date>2019-07-31T23:03:35Z</dc:date>
    <item>
      <title>Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577868#M163793</link>
      <description>&lt;P&gt;Hi. I am stuck on a lag problem. Doing a Previous 6 month cum_sum for each unique SN-Name combination, I want to reset all the lag counts to zero after each new S/N-new Name combination to begin summing the running cum again. The code does that for First.SN/First.Name but the resets to 0 seem to be “temporary”; after the first.Name, the lag values from three rows above seem to continue on where they left off?? (red). A partial OUT table is shown below from a big input table. Is that enough to let you know what is wrong? Thanks.&lt;/P&gt;&lt;P&gt;(This pattern repeats).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/* calculate previous 6 months running sum */&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; WANT; /* new table name */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DO UNTIL (Last.SN);&lt;/P&gt;&lt;P&gt;set HAVE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;by SN&amp;nbsp; Name ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lag1=lag1(count);lag2=lag2(count); lag3=lag3(count);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lag4=lag4(count); lag5=lag5(count); lag6=lag6(count);&lt;/P&gt;&lt;P&gt;&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; IF first.Name&amp;nbsp; 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; cum_sum=count; lag1=&lt;STRONG&gt;0&lt;/STRONG&gt;;lag2=&lt;STRONG&gt;0&lt;/STRONG&gt;;lag3=&lt;STRONG&gt;0&lt;/STRONG&gt;;lag4=&lt;STRONG&gt;0&lt;/STRONG&gt;;lag5=&lt;STRONG&gt;0&lt;/STRONG&gt;;lag6=&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; 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;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE DO cum_sum=sum(count,of lag1-lag6);&lt;/P&gt;&lt;P&gt;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;/* drop lag4-lag6;*/ /*drop cum_sum;*/&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SN&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Date&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lag1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lag2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lag3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Lag4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Lag5 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lag6 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cum_sum&lt;/P&gt;&lt;P&gt;11075652&amp;nbsp;&amp;nbsp;NameA &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 03/2019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 42&lt;/P&gt;&lt;P&gt;11075652&amp;nbsp;&amp;nbsp;NameA &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04/2019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 45&lt;/P&gt;&lt;P&gt;11075652&amp;nbsp;&amp;nbsp;NameA &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05/2019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 45&lt;/P&gt;&lt;P&gt;11075652&amp;nbsp;&amp;nbsp;NameA &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 06/2019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&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;FONT color="#3366FF"&gt;&amp;nbsp; &lt;STRONG&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 4&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 39&lt;/P&gt;&lt;P&gt;11075652&amp;nbsp; NameB &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05/2019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;11075682&amp;nbsp;&amp;nbsp;NameA &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 07/2019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;11075682&amp;nbsp; NameC &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05/2018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/P&gt;&lt;P&gt;11075682&amp;nbsp;&amp;nbsp;NameC &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 06/2018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color="#FF0000"&gt;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&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; 14&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;11075682&amp;nbsp;&amp;nbsp;NameC &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 07/2018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&lt;/P&gt;&lt;P&gt;11075682&amp;nbsp;&amp;nbsp;NameC &amp;nbsp;&amp;nbsp;&amp;nbsp;&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/2018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/P&gt;&lt;P&gt;11075682&amp;nbsp;&amp;nbsp;NameC &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 09/2018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 18:51:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577868#M163793</guid>
      <dc:creator>crawfe</dc:creator>
      <dc:date>2019-07-30T18:51:31Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577876#M163796</link>
      <description>&lt;P&gt;These 6 motnhs running cumulative sums would be easy to create in PROC EXPAND, and then there would be no issue with resetting the lagged variables.&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 19:33:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577876#M163796</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-07-30T19:33:32Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577881#M163797</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/268817"&gt;@crawfe&lt;/a&gt;&amp;nbsp;do you have SAS/ETS license?&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 19:38:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577881#M163797</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-07-30T19:38:23Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577886#M163800</link>
      <description>&lt;P&gt;Looks to me like your code is doing exactly what you're telling it to do.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do you expect the second "11075682, NameC" row to take the previous values? it's no longer first.Name there, so it won't reset. What do you expect? Do you expect the second&amp;nbsp;"11075682, NameC" row to have only values from the first&amp;nbsp;"11075682, NameC" row or the previous 6 records, regardless of SN and Name?&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 20:01:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577886#M163800</guid>
      <dc:creator>noling</dc:creator>
      <dc:date>2019-07-30T20:01:55Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577888#M163801</link>
      <description>&lt;P&gt;Since you already have a DO loop around your SET why bother with LAG() function at all?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT; 
do until(last.SN);
  set HAVE;
  by SN Name ;
  cum_sum=sum(count, of lag1-lag6);
  output;
  lag1=count;
  lag2=lag1;
  lag3=lag2;
  lag4=lag3;
  lag5=lag4;
  lag6=lag5;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 30 Jul 2019 20:16:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577888#M163801</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-07-30T20:16:35Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577889#M163802</link>
      <description>&lt;P&gt;sorry it wrapped....I wanted a new running list to start with 11075682/Name C.&lt;/P&gt;&lt;P&gt;First row in this group should have all the lags reset to 0 then start summing again from zero,&lt;/P&gt;&lt;P&gt;not reaching back to get lag values from a previous group (3, 4).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I don't have the ETS...&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 20:16:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577889#M163802</guid>
      <dc:creator>crawfe</dc:creator>
      <dc:date>2019-07-30T20:16:54Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577891#M163804</link>
      <description>&lt;P&gt;...i don't understand, you say don't bother with Lag then you include Lag in your code?&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 20:20:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577891#M163804</guid>
      <dc:creator>crawfe</dc:creator>
      <dc:date>2019-07-30T20:20:51Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577896#M163807</link>
      <description>&lt;P&gt;Tom, your code sets all the Lags to 1 (=count(1st row)) even for SN1/Name1 row 2, which needs to have lags2-6 = 0&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Count Cum_sum Lag1 Lag 2 etc.&lt;/P&gt;&lt;P&gt;SN1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name1 11/2017 &amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 . . . . . .&lt;BR /&gt;SN1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name1 12/2017&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 1 &lt;FONT color="#FF0000"&gt;1 1 1 1 1&lt;/FONT&gt;&lt;BR /&gt;SN1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name1 01/2018&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 1 1 1 1 1 1&lt;BR /&gt;SN1 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Name1 02/2018&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 0 0 0 0 0&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 20:37:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577896#M163807</guid>
      <dc:creator>crawfe</dc:creator>
      <dc:date>2019-07-30T20:37:45Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577899#M163808</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/268817"&gt;@crawfe&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;...i don't understand, you say don't bother with Lag then you include Lag in your code?&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;There is no LAG() function calls.&lt;/P&gt;
&lt;P&gt;Note if you want code that works without debugging you need to post working sample data.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;
  input SN $ Name $ Date Count ;
  informat date anydtdte.;
  format date yymm7.;
cards;
11075652  NameA     03/2019  12  
11075652  NameA     04/2019  4   
11075652  NameA     05/2019  3   
11075652  NameA     06/2019  1   
11075652  NameB     05/2019  1   
11075682  NameA     07/2019  1   
11075682  NameC     05/2018  2   
11075682  NameC     06/2018  2   
11075682  NameC     07/2018  2   
11075682  NameC     08/2018  0   
11075682  NameC     09/2018  2   
;

data WANT; 
do until(last.SN);
  set HAVE;
  by SN Name ;
  cum_sum=sum(count, of lag1-lag6);
  output;
  lag6=lag5;
  lag5=lag4;
  lag4=lag3;
  lag3=lag2;
  lag2=lag1;
  lag1=count;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs       SN       Name        Date    Count    cum_sum    lag1    lag2    lag3    lag4    lag5    lag6

  1    11075652    NameA    2019M03      12        12        .       .       .       .       .       .
  2    11075652    NameA    2019M04       4        16       12       .       .       .       .       .
  3    11075652    NameA    2019M05       3        19        4      12       .       .       .       .
  4    11075652    NameA    2019M06       1        20        3       4      12       .       .       .
  5    11075652    NameB    2019M05       1        21        1       3       4      12       .       .
  6    11075682    NameA    2019M07       1         1        .       .       .       .       .       .
  7    11075682    NameC    2018M05       2         3        1       .       .       .       .       .
  8    11075682    NameC    2018M06       2         5        2       1       .       .       .       .
  9    11075682    NameC    2018M07       2         7        2       2       1       .       .       .
 10    11075682    NameC    2018M08       0         7        2       2       2       1       .       .
 11    11075682    NameC    2018M09       2         9        0       2       2       2       1       .&lt;/PRE&gt;</description>
      <pubDate>Tue, 30 Jul 2019 21:17:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577899#M163808</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-07-30T21:17:22Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577900#M163809</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/268817"&gt;@crawfe&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;When you use the LAG&lt;EM&gt;n&lt;/EM&gt; function, you need to understand its nature. To recap:&lt;/P&gt;
&lt;P&gt;-- LAG&lt;EM&gt;n&lt;/EM&gt; is a queue of &lt;EM&gt;N&lt;/EM&gt; items in memory occupying &lt;EM&gt;&amp;lt;item length&amp;gt;&lt;/EM&gt;*&lt;EM&gt;N&lt;/EM&gt; bytes. If the queue is numeric, &lt;EM&gt;&amp;lt;item length&amp;gt;&lt;/EM&gt; = 8.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- Every time LAG&lt;EM&gt;n&lt;/EM&gt; is called &lt;EM&gt;for the same allocated queue&lt;/EM&gt;, the item in the front of the queue is ejected (called &lt;EM&gt;dequeueing&lt;/EM&gt;), and the value of the argument enters the rear of the queue (called &lt;EM&gt;enqueueing&lt;/EM&gt;), displacing the rest of the items 1 position towards the front.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- "For the same allocated queue" means that each time the compiler sees another reference to LAG&lt;EM&gt;n&lt;/EM&gt;, it allocates a &lt;EM&gt;separate&lt;/EM&gt; queue with &lt;EM&gt;N&lt;/EM&gt; items. Thus,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;x = lag (x) ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;x = lag (x) ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;is not at all the same as:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;do i = 1 to 2 ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; x = lag (x) ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;end ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is because in the former case, the compiler has seen 2 LAG references and organized 2 separate, &lt;EM&gt;completely independent&lt;/EM&gt;, queues. Thus, the first &lt;FONT face="courier new,courier"&gt;x=lag(x)&lt;/FONT&gt; causes the dequeing and enqueueing only in the first LAG queue, and the second &lt;FONT face="courier new,courier"&gt;x=lag(x)&lt;/FONT&gt; does the same only for the second queue. In the latter case, the compiler sees only one LAG reference and therefore organizes a single LAG queue, so that each time the DO loop iterates,&amp;nbsp;the dequeing and enqueueing occur in the same, single, LAG queue.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- Thus, a LAGn queue cannot be "cleared up" by doing anything with the variables, to which a call to the LAGn function assigns the dequeued value. It can be cleared up only by calling LAG&lt;EM&gt;n&lt;/EM&gt; for the same queue (i.e. in a loop) &lt;EM&gt;N&lt;/EM&gt; times, so that the item currently in the back of the queue is moved forward to the front of it and gets dequeued. The LAG&lt;EM&gt;n&lt;/EM&gt; argument used in this action should be given the value to which you want the queue reinitialized - for example, a missing value or zero. This way, when after that you call LAGn again to create your assigned lag values, the first item dequeued will be that value.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After these prelim notes, it should be clear how to clear your queues before each BY group:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                              
  input sn count ;                       
  cards ;                                
11075652  12                             
11075652   4                             
11075652   3                             
11075652   1                             
11075652   1                             
11075682   1                             
11075682   2                             
11075682   2                             
11075682   2                             
11075682   0                             
11075682   2                             
run ;                                    
                                         
data want ;                              
  if 0 then set have ; /*keep the original variable order*/                   
  count = 0 ;          /*you want to initialize LAGs to 0*/                   
  do _n_ = 1 to 6 ;    /*loop 6 times, as LAG6 is longest*/                  
    link lag ;         /*use LINK to have the compiler see each LAGn just once*/                  
  end ;                                  
  do until (last.sn) ;                   
    set have ;                           
    by sn ;                              
    link lag ;         /*use LINK to have the compiler see each LAGn just once*/                           
    cum_sum = sum (count, of lag1-lag6) ;
    output ;                             
  end ;                                  
  return ;                               
    lag: lag1 = lag1 (count) ;           
         lag2 = lag2 (count) ;           
         lag3 = lag3 (count) ;           
         lag4 = lag4 (count) ;           
         lag5 = lag5 (count) ;           
         lag6 = lag6 (count) ;           
  return ;                               
run ;                                    
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This way, the LAG&lt;EM&gt;n&lt;/EM&gt;&amp;nbsp;variables will remain 0 for the first &lt;EM&gt;N&lt;/EM&gt; records in each BY group, as they should. Alternatively, you can reinitialize the queues with missing values - it won't affect CUM_SUM, but&amp;nbsp; in this case, the LAGn variables will remain missing for the first N records in each BY group, and coding will be a bit terser:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;                              
  do until (last.sn) ;                   
    set have ;                           
    by sn ;                              
    link lag ;                           
    cum_sum = sum (count, of lag1-lag6) ;
    output ;                             
  end ;                                  
  count = . ;                            
  do _n_ = 1 to 6 ;                      
    link lag ;                           
  end ;                                  
  return ;                               
    lag: lag1 = lag1 (count) ;           
         lag2 = lag2 (count) ;           
         lag3 = lag3 (count) ;           
         lag4 = lag4 (count) ;           
         lag5 = lag5 (count) ;           
         lag6 = lag6 (count) ;           
  return ;                               
run ;                                    
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jul 2019 21:26:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577900#M163809</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-07-30T21:26:27Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578037#M163884</link>
      <description>&lt;P&gt;I try to avoid using the lag function due to the complexities that&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262"&gt;@hashman&lt;/a&gt;&amp;nbsp;describes. Here's an alternative method using a RETAIN statement:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;
  input SN $ Name $ Date Count ;
  informat date anydtdte.;
  format date yymm7.;
cards;
11075652  NameA     03/2019  12  
11075652  NameA     04/2019  4   
11075652  NameA     05/2019  3   
11075652  NameA     06/2019  1   
11075652  NameB     05/2019  1   
11075682  NameA     07/2019  1   
11075682  NameC     05/2018  2   
11075682  NameC     06/2018  2   
11075682  NameC     07/2018  2   
11075682  NameC     08/2018  0   
11075682  NameC     09/2018  2   
;
run;

data want;
	set have;
	retain lag1-lag6 count_retain 0;
	by SN Name;

	*clear retained values for each new group;
	if first.name then do;
		lag1=0; lag2=0; lag3=0; lag4=0; lag5=0; lag6=0; count_retain=0;
	end;
	*pass down retained values;
	lag6=lag5;
	lag5=lag4;
	lag4=lag3;
	lag3=lag2;
	lag2=lag1;
	lag1=count_retain;
	count_retain=count;

	cum_sum=sum(count,of lag1-lag6);
	drop count_retain;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 31 Jul 2019 12:43:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578037#M163884</guid>
      <dc:creator>noling</dc:creator>
      <dc:date>2019-07-31T12:43:11Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578049#M163892</link>
      <description>&lt;P&gt;Thanks! That is a Lag description I wouldn't find anywhere else!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As asked for above, here is a data set that is typical for my input table.&lt;/P&gt;&lt;P&gt;Three levels of variables/fields (DateMY is in mmyys7.).&lt;/P&gt;&lt;P&gt;The lag sums need to be calculated for each SN-Name combination, increasing by date,&lt;/P&gt;&lt;P&gt;SO after 101-Name1 lag sums are complete, the lag1-6 queue needs to go back to 0 for lag(n). Then back to zero&lt;/P&gt;&lt;P&gt;after 101-Name2, 201-Name3, etc. The data would be sorted as shown.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SN&amp;nbsp; Name&amp;nbsp; DateMY&amp;nbsp; Count&amp;nbsp; (WANT-Lag cum_sum)&lt;/P&gt;&lt;P&gt;101 Name1 11/2017 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&lt;BR /&gt;101 Name1 12/2017 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16&lt;BR /&gt;101 Name1 02/2018 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 19&lt;BR /&gt;101 Name1 04/2018 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;BR /&gt;101 Name1 05/2018 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29&lt;BR /&gt;101 Name1 07/2018 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37&lt;BR /&gt;101 Name2 03/2018 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;101 Name2 04/2018 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;201 Name3 03/2018 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;201 Name3 05/2018 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&lt;BR /&gt;202 Name1 01/2018 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;202 Name1 03/2018 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;202 Name1 05/2018 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;BR /&gt;202 Name2 02/2018 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;202 Name2 03/2018 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;202 Name2 05/2018 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 13:06:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578049#M163892</guid>
      <dc:creator>crawfe</dc:creator>
      <dc:date>2019-07-31T13:06:01Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578073#M163903</link>
      <description>&lt;P&gt;If you want to reset the sum when the SN plus NAME combination changes then make sure to setup the code to do it that way and not just when SN changes.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;do until(last.name);
  set have;
  by sn name;
  ...&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 31 Jul 2019 13:34:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578073#M163903</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-07-31T13:34:34Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578092#M163910</link>
      <description>&lt;P&gt;Among all the suggestions you have received, there must be one that does what you want.&amp;nbsp; Just in case you are not yet convinced of that, here is how I would approach the problem:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   back6 = back5;
   back5 = back4;
   back4 = back3;
   back3 = back2;
   back2 = back1;
   back1 = count;
   retain back1-back5;&lt;BR /&gt;   set have;
   by SN name;
   if first.name then call missing(of back1-back6);
   cum_sum = sum(count, of back1-back6);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When using the SUM function, there is no need to re-set values to zero.&amp;nbsp; It's easier to re-set them to missing instead.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 14:15:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578092#M163910</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-07-31T14:15:20Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578164#M163934</link>
      <description>&lt;P&gt;Several of them did work exactly as desired. Thanks to all. As many of us are, I am&lt;/P&gt;&lt;P&gt;in a position of having to learn and produce at the same time. This really helps to see different&lt;/P&gt;&lt;P&gt;approaches. Thanks!&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 18:04:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578164#M163934</guid>
      <dc:creator>crawfe</dc:creator>
      <dc:date>2019-07-31T18:04:59Z</dc:date>
    </item>
    <item>
      <title>Re: Difficulty resetting Lag to zero (permanently)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578240#M163953</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;Agreed in more than one sense (see below). I answered the OP question about clearing the lags since this is what the OP had asked for; and I don't think that for problems of this kind using the LAG&lt;EM&gt;n&lt;/EM&gt; function, let alone using multiple queues, is called for.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As to your code, note that though it doesn't use the LAG&lt;EM&gt;n&lt;/EM&gt; function explicitly, it essentially emulates the working of LAG6 by moving all the elements of an artificial queue LAG1-LAG6 upward for every record - which is what LAG6 does behind the scenes (but about an order of magnitude more efficiently - I've tested). The advantage of using your artificial queue is that all of its items are accessible to the PDV, while with LAG6, the only item available is at the head of the queue. (That must be why the OP deemed the use of all the functions LAG1 through LAG6 necessary.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Having said that, your code involves a lot of hard coding - the more, the wider the rolling sum window is. Therefore, the same concept can be expressed terser using an array, e.g. (I've set W=3 to allow at least one BY group be larger than W - otherwise we don't have a good test case):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                       
  input SN $ Name $ Date Count ;  
  informat date anydtdte. ;       
  format date yymm7. ;            
  cards ;                         
11075652  NameA  03/2019  12      
11075652  NameA  04/2019   4      
11075652  NameA  05/2019   3      
11075652  NameA  06/2019   1      
11075652  NameB  05/2019   1      
11075682  NameA  07/2019   1      
11075682  NameC  05/2018   2      
11075682  NameC  06/2018   2      
11075682  NameC  07/2018   2      
11075682  NameC  08/2018   0      
11075682  NameC  09/2018   2      
;                                 
run ;                             
                                  
%let w = 3 ;                      
                                  
data want ;                       
  do until (last.name) ;          
    set have ;                    
    by sn name ;                  
    array cl count lag1-lag&amp;amp;w ;   
    cum_sum = sum (of cl[*]) ;    
    output ;                      
    do _i_ = dim (cl) to 2 by -1 ;
      cl [_i_] = cl [_i_-1] ;     
    end ;                         
  end ;                           
run ;                             
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now, as I've repeatedly stated in the past (including in a similar thread, methinks originated by the same OP in the same vein), the whole idea of computing a rolling sum in a window of size &lt;EM&gt;W&lt;/EM&gt; by calculating all the lags from 1 to &lt;EM&gt;W&lt;/EM&gt; and summing them up is totally misguided. The reason is that to compute a rolling sum, we only need to add the leading item and subtract the item &lt;EM&gt;W&lt;/EM&gt;+1 records back in the file. This way, computing a rolling sum for &lt;EM&gt;W&lt;/EM&gt;=3 and &lt;EM&gt;W&lt;/EM&gt;=100000 is equally efficient, while summing up 3 lag items vs 100000 lag items - not to mention getting them all - is all but. In this case, the leading item is current COUNT, so all we need is the value of COUNT &lt;EM&gt;W&lt;/EM&gt;+1 records back in the file - and that only in the case when the size of the BY group exceeds &lt;EM&gt;W&lt;/EM&gt;+1. That item can be fetched using the LAG&lt;EM&gt;w&lt;/EM&gt; function, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;                                   
  do until (last.name) ;                      
    set have ;                                
    by sn name ;                              
    link lag ;                                
    cum_sum = sum (cum_sum, count, - _sub) ;  
    output ;                                  
  end ;                                       
  count = 0 ;                                 
  do _n_ = 1 to &amp;amp;w + 1 ;                      
    link lag ;                                
  end ;                                       
  return ;                                    
  lag: _sub = sum (lag%eval(&amp;amp;w+1)(count), 0) ;
  return ;                                    
run ;                                         
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;However, again, using the LAG&lt;EM&gt;w&lt;/EM&gt; function here, even just one, is far from optimal since its internal queue needs to be cleared before/after each BY group, which for large &lt;EM&gt;W&lt;/EM&gt; means a lot of overhead. It's much simpler and less onerous to fetch the item &lt;EM&gt;W&lt;/EM&gt;+1 back by using a direct access SET, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop = _:) ;                                
  do _n_ = 1 by 1 until (last.name) ;                  
    set have curobs = q ;                              
    by sn name ;                                       
    if _n_ &amp;gt; &amp;amp;w + 1 then do ;                          
      p = q - (&amp;amp;w + 1) ;                               
      set have (keep=count rename=count=_c) point = p ;
    end ;                                              
    cum_sum = sum (cum_sum, count, - sum (_c, 0)) ;    
    output ;                                           
  end ;                                                
run ;                                                  
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;In principle, there can be situations where we need all the lag values (though I can hardly fancy what for - surely not for computing a rolling sum, as shown above). In this case, using multiple LAG function queues is utterly misguided, too, because a simply array can do much more efficiently:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let w = 3 ;                                                                    
                                                                                
proc sql noprint ;                                                              
  select max (q) into :q from (select count (*) as q from have group sn, name) ;
quit ;                                                                          
                                                                                
data want ;                                                                     
  array q [-&amp;amp;w:&amp;amp;q] _temporary_ ;                                                
  do _n_ = 1 by 1 until (last.name) ;                                           
    set have ;                                                                  
    by sn name ;                                                                
    q[_n_] = count ;                                                            
    array ll lag1-lag&amp;amp;w ;                                                       
    do over ll ;                                                                
      ll = q[_n_-_i_] ;                                                         
    end ;                                                                       
    output ;                                                                    
  end ;                                                                         
run ;                                                                           
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note that by the nature of the algorithm, the array doesn't need to be reinitialized before each BY group because every new BY group just overwrites the requisite number of array items. However, the need to pre-process the input file to size up the array is a bit off-putting. That can be fixed by merely setting the upper bound to something like 1000000 - but that means making the assumption that no by-group is larger. A better solution is using the hash object, as it doesn't require making any assumptions about data as long as memory is plentiful enough for the largest BY-group (though the code gets a little bit more verbose than with the array):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let w = 3 ;                         
                                     
data want (drop = _:) ;              
  if _n_ = 1 then do ;               
    dcl hash h () ;                  
    h.definekey  ("_n_") ;           
    h.definedata ("_c") ;            
    h.definedone () ;                
  end ;                              
  do _n_ = 1 by 1 until (last.name) ;
    set have (rename=count=_c) ;     
    by sn name ;                     
    count = _c ;                     
    h.replace() ;                    
    array v lag1-lag&amp;amp;w ;             
    do over v ;                      
      _c = . ;                       
      _iorc_ = h.find (key:_n_-_i_) ;
      v = _c ;                       
    end ;                            
    output ;                         
  end ;                              
run ;                                
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Here again, by the nature of the algorithm, essentially emulating the array approach by calling the REPLACE method rather than ADD, there's no need to clear the hash for each BY group. If ADD were used, the CLEAR method would have to be called before (or after) the DOW loop. One technical subtlety is that if the FIND method fails when (_n_ - _i_)&amp;nbsp; &amp;lt; 1, _C remains missing, which is what we want. A little bit of efficiency can be added by calling FIND only when&amp;nbsp;(_n_ - _i_)&amp;nbsp; &amp;gt; 0.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 23:03:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/578240#M163953</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-07-31T23:03:35Z</dc:date>
    </item>
  </channel>
</rss>

