<?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: Cumulative based on dates and multiple variables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580826#M165019</link>
    <description>This worked! i realized i need the next 5 weeks and to not include the current week value, but i can adjust the code to accordingly. This is a great solution. Thanks again!</description>
    <pubDate>Tue, 13 Aug 2019 14:38:13 GMT</pubDate>
    <dc:creator>lmg</dc:creator>
    <dc:date>2019-08-13T14:38:13Z</dc:date>
    <item>
      <title>Cumulative based on dates and multiple variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580669#M164967</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need have a cumulative sum of the next couple of weeks (dependent on a factor variable). I can do this with SQL, but is bad for performance and does not run on large data sets.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Basically I want the sum of the next X amount of weeks (based on the column WKfactor) for each unique product and location. Original data does not have the uniquekey, but created it for sql code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;UniqueKey&lt;/TD&gt;&lt;TD&gt;Product&lt;/TD&gt;&lt;TD&gt;Location&lt;/TD&gt;&lt;TD&gt;Week&lt;/TD&gt;&lt;TD&gt;WKFactor&lt;/TD&gt;&lt;TD&gt;Value&lt;/TD&gt;&lt;TD&gt;desired sum&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;7-Jan-19&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;43&lt;/TD&gt;&lt;TD&gt;94&lt;/TD&gt;&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 4 weeks (comes from WK factor) of product A, Location 1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;14-Jan-19&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 45weeks (comes from WK factor) of product A, Location 1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;21-Jan-19&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;27&lt;/TD&gt;&lt;TD&gt;74&lt;/TD&gt;&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 4 weeks (comes from WK factor) of product A, Location 1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;28-Jan-19&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;47&lt;/TD&gt;&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 3 weeks (because week factor is 4, but there are only 3 weeks in data set remaining) of product A, Location 1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4-Feb-19&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11-Feb-19&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7-Jan-19&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;31&lt;/TD&gt;&lt;TD&gt;66&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;14-Jan-19&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;35&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;21-Jan-19&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;41&lt;/TD&gt;&lt;TD&gt;47&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;28-Jan-19&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;7-Jan-19&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;101&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;14-Jan-19&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;34&lt;/TD&gt;&lt;TD&gt;79&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;21-Jan-19&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;97&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;28-Jan-19&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;52&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4-Feb-19&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is the SQL code that gives me the desired output, but takes too long doing the inner joins on such a large data set. any better ways?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table work.desire as
select uniquekey, product, location, week, wkfactor, value,
(select sum(value), from work.have where uniquekey=a.uniquekey and week &amp;gt;= a.week and week &amp;lt;= intnx('week', a.week, a.wkfactor)) as desiredsum
from work.have as a;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 12 Aug 2019 21:23:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580669#M164967</guid>
      <dc:creator>lmg</dc:creator>
      <dc:date>2019-08-12T21:23:44Z</dc:date>
    </item>
    <item>
      <title>Re: Cumulative based on dates and multiple variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580689#M164974</link>
      <description>&lt;P&gt;Do you numbers always vary between 2 and 5 or can they be anything? Do you have a license for SAS ETS?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can check what you have licensed in SAS using:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc setinit; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And what's installed on your system using:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc product_status; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The output will be in the log.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/284961"&gt;@lmg&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I need have a cumulative sum of the next couple of weeks (dependent on a factor variable). I can do this with SQL, but is bad for performance and does not run on large data sets.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Basically I want the sum of the next X amount of weeks (based on the column WKfactor) for each unique product and location. Original data does not have the uniquekey, but created it for sql code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;UniqueKey&lt;/TD&gt;
&lt;TD&gt;Product&lt;/TD&gt;
&lt;TD&gt;Location&lt;/TD&gt;
&lt;TD&gt;Week&lt;/TD&gt;
&lt;TD&gt;WKFactor&lt;/TD&gt;
&lt;TD&gt;Value&lt;/TD&gt;
&lt;TD&gt;desired sum&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;7-Jan-19&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;43&lt;/TD&gt;
&lt;TD&gt;94&lt;/TD&gt;
&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 4 weeks (comes from WK factor) of product A, Location 1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;14-Jan-19&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;76&lt;/TD&gt;
&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 45weeks (comes from WK factor) of product A, Location 1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;21-Jan-19&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;27&lt;/TD&gt;
&lt;TD&gt;74&lt;/TD&gt;
&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 4 weeks (comes from WK factor) of product A, Location 1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;28-Jan-19&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;22&lt;/TD&gt;
&lt;TD&gt;47&lt;/TD&gt;
&lt;TD&gt;&amp;lt;-sum of 'value' for the next for the next 3 weeks (because week factor is 4, but there are only 3 weeks in data set remaining) of product A, Location 1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;4-Feb-19&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;22&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A1&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;11-Feb-19&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A2&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;7-Jan-19&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;31&lt;/TD&gt;
&lt;TD&gt;66&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A2&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;14-Jan-19&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;35&lt;/TD&gt;
&lt;TD&gt;76&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A2&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;21-Jan-19&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;41&lt;/TD&gt;
&lt;TD&gt;47&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A2&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;28-Jan-19&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;7-Jan-19&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;22&lt;/TD&gt;
&lt;TD&gt;101&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;14-Jan-19&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;34&lt;/TD&gt;
&lt;TD&gt;79&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;21-Jan-19&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;45&lt;/TD&gt;
&lt;TD&gt;97&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;28-Jan-19&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;22&lt;/TD&gt;
&lt;TD&gt;52&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;4-Feb-19&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the SQL code that gives me the desired output, but takes too long doing the inner joins on such a large data set. any better ways?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table work.desire as
select uniquekey, product, location, week, wkfactor, value,
(select sum(value), from work.have where uniquekey=a.uniquekey and week &amp;gt;= a.week and week &amp;lt;= intnx('week', a.week, a.wkfactor)) as desiredsum
from work.have as a;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Aug 2019 00:56:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580689#M164974</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-08-13T00:56:47Z</dc:date>
    </item>
    <item>
      <title>Re: Cumulative based on dates and multiple variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580705#M164981</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/284961"&gt;@lmg&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;Since you have the (PRODUCT,LOCATION) composite key properly sorted, there's no need for UNIQUEKEY to be created: The processing can rely on the composite key alone; and it looks like a straightforward DoW-loop/array job:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                                                                        
  input (UniqueKey Product) (:$2.) Location Week :date. WKFactor Value ;           
  format week yymmdd10. ;                                                          
  cards ;                                                                          
A1      A      1      07-Jan-19      4      43      94                             
A1      A      1      14-Jan-19      5       2      76                             
A1      A      1      21-Jan-19      4      27      74                             
A1      A      1      28-Jan-19      4      22      47                             
A1      A      1      04-Feb-19      4      22      25                             
A1      A      1      11-Feb-19      4       3       3                             
A2      A      2      07-Jan-19      2      31      66                             
A2      A      2      14-Jan-19      2      35      76                             
A2      A      2      21-Jan-19      2      41      47                             
A2      A      2      28-Jan-19      2       6       6                             
B1      B      1      07-Jan-19      3      22     101                             
B1      B      1      14-Jan-19      2      34      79                             
B1      B      1      21-Jan-19      3      45      97                             
B1      B      1      28-Jan-19      5      22      52                             
B1      B      1      04-Feb-19      2      30      30                             
;                                                                                  
run ;                                                                              
                                                                                   
data want (drop = _:) ;                                                            
  do _i = 1 by 1 until (last.location) ;                                           
    set have ;                                                                     
    by product location ;                                                          
    array wfs [3, 1000000] _temporary_ ;                                           
    wfs [1, _i] = week ;                                                           
    wfs [2, _i] = wkfactor ;                                                       
    do _j = 1 to _i ;                                                              
      if intck ("week", wfs [1, _j], week) &amp;lt; wfs [2, _j] then wfs [3, _j] + value ;
    end ;                                                                          
  end ;                                                                            
  do _i = 1 to _i ;                                                                
    set have ;                                                                     
    desired_value = wfs [3, _i] ;                                                  
    wfs [3, _i] = . ;                                                              
    output ;                                                                       
  end ;                                                                            
run ;                                                                              
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This code relies on the assumption that no (PRODUCT,LOCATION) by-group is larger than 1 million rows. Methinks it's pretty reasonable, and all you sacrifice making it system-wise is about 20 MB of memory. However, if you don't like making assumptions about data whatsoever, be they reasonable or not, you can eschew it by making an extra preliminary pass through the data set to size the upper bounds of the array WFS:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql noprint ;                                                                        
  select max (q) into :hb from (select count (*) as q from have group product, location) ;
quit ;                                                                                    
                                                                                          
data want (drop = _:) ;                                                                   
  do _i = 1 by 1 until (last.location) ;                                                  
    set have ;                                                                            
    by product location ;                                                                 
    array wfs [3, &amp;amp;hb] _temporary_ ;                                                      
    wfs [1, _i] = week ;                                                                  
    wfs [2, _i] = wkfactor ;                                                              
    do _j = 1 to _i ;                                                                     
      if intck ("week", wfs [1, _j], week) &amp;lt; wfs [2, _j] then wfs [3, _j] + value ;       
    end ;                                                                                 
  end ;                                                                                   
  do _i = 1 to _i ;                                                                       
    set have ;                                                                            
    desired_value = wfs [3, _i] ;                                                         
    wfs [3, _i] = . ;                                                                     
    output ;                                                                              
  end ;                                                                                   
run ;                                                                                     
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Yet another, even more dynamic approach, is to replace the array with a hash table and thus avoid the extra pass through the data. If you would like to have a stab at this exercise, be my guest; and it you should find it a bit laborious, circle back and someone will sure help you figure it out. Personally, I think that you're perfectly safe with the "1000000" assumption, and the solution using it is most likely to be the fastest time-wise.&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;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Aug 2019 07:33:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580705#M164981</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-08-13T07:33:04Z</dc:date>
    </item>
    <item>
      <title>Re: Cumulative based on dates and multiple variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580826#M165019</link>
      <description>This worked! i realized i need the next 5 weeks and to not include the current week value, but i can adjust the code to accordingly. This is a great solution. Thanks again!</description>
      <pubDate>Tue, 13 Aug 2019 14:38:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Cumulative-based-on-dates-and-multiple-variables/m-p/580826#M165019</guid>
      <dc:creator>lmg</dc:creator>
      <dc:date>2019-08-13T14:38:13Z</dc:date>
    </item>
  </channel>
</rss>

