<?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: Complex logic with Cumulative Sum in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/704178#M215848</link>
    <description>Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13728"&gt;@SASJedi&lt;/a&gt;, Any luck on this please?</description>
    <pubDate>Mon, 07 Dec 2020 16:01:17 GMT</pubDate>
    <dc:creator>kashun</dc:creator>
    <dc:date>2020-12-07T16:01:17Z</dc:date>
    <item>
      <title>Complex logic with Cumulative Sum using Hash Objects</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/702945#M215342</link>
      <description>&lt;P&gt;This might be a little complex to explain but would like to ask. I do have a dataset that uses conditions to generate extra fields using accumulated sum of those fields. I was hoping to use lags of the accumulated sum&amp;nbsp; of the fields to create the result but not sure if there is a better approach.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;HAVE:&lt;/STRONG&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE;
input @1 ID @5 Flag $2. @8 Date DATE9.  @18 Amount @24 C1 @27 C2 @30 C3 @33 PAY1_LIMIT @38 PAY2_DEC @42 PAY2_LIMIT @47 MAX_PAY ;
FORMAT DATE DATE9.;
datalines;
173 C1 01JAN2020 100   20 40 15 1000 0.1 1200 2000
173 M  03APR2020 300   20 40 15 1000 0.1 1200 2000
173 M  24APR2020 1300  20 40 15 1000 0.1 1200 2000
173 M  07JUN2020 500   20 40 15 1000 0.1 1200 2000
173 M  13JUN2020 -1300 20 40 15 1000 0.1 1200 2000
173 C1 28JUN2020 40    20 40 15 1000 0.1 1200 2000
173 M  07JUL2020 300   20 40 15 1000 0.1 1200 2000
173 C2 05AUG2020 50    20 40 15 1000 0.1 1200 2000
173 M  20AUG2020 1500  20 40 15 1000 0.1 1200 2000
173 C3 15SEP2020 30    20 40 15 1000 0.1 1200 2000
173 M  21OCT2020 -500  20 40 15 1000 0.1 1200 2000
173 C3 15NOV2020 30    20 40 15 1000 0.1 1200 2000
;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Want&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;ID&lt;/TD&gt;
&lt;TD&gt;Flag&lt;/TD&gt;
&lt;TD&gt;Date&lt;/TD&gt;
&lt;TD&gt;Amount&lt;/TD&gt;
&lt;TD&gt;C1&lt;/TD&gt;
&lt;TD&gt;C2&lt;/TD&gt;
&lt;TD&gt;C3&lt;/TD&gt;
&lt;TD&gt;PAY1_LIMIT&lt;/TD&gt;
&lt;TD&gt;PAY2_DEC&lt;/TD&gt;
&lt;TD&gt;PAY2_LIMIT&lt;/TD&gt;
&lt;TD&gt;MAX_PAY&lt;/TD&gt;
&lt;TD&gt;Pay_C&lt;/TD&gt;
&lt;TD&gt;PAY1&lt;/TD&gt;
&lt;TD&gt;PAY2&lt;/TD&gt;
&lt;TD&gt;TOTAL_PAY&lt;/TD&gt;
&lt;TD&gt;Accum_PAY_C&lt;/TD&gt;
&lt;TD&gt;Accum_PAY1&lt;/TD&gt;
&lt;TD&gt;Accum_PAY2&lt;/TD&gt;
&lt;TD&gt;Accum_TOTAL_PAY&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;C1&lt;/TD&gt;
&lt;TD&gt;01Jan2020&lt;/TD&gt;
&lt;TD&gt;100&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;M&lt;/TD&gt;
&lt;TD&gt;03Apr2020&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;320&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;M&lt;/TD&gt;
&lt;TD&gt;24Apr2020&lt;/TD&gt;
&lt;TD&gt;1300&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;700&lt;/TD&gt;
&lt;TD&gt;60&lt;/TD&gt;
&lt;TD&gt;760&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;60&lt;/TD&gt;
&lt;TD&gt;1080&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;M&lt;/TD&gt;
&lt;TD&gt;07Jun2020&lt;/TD&gt;
&lt;TD&gt;500&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;60&lt;/TD&gt;
&lt;TD&gt;1080&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;M&lt;/TD&gt;
&lt;TD&gt;13Jun2020&lt;/TD&gt;
&lt;TD&gt;-1300&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;-700&lt;/TD&gt;
&lt;TD&gt;-60&lt;/TD&gt;
&lt;TD&gt;-760&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;320&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;C1&lt;/TD&gt;
&lt;TD&gt;28Jun2020&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;340&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;M&lt;/TD&gt;
&lt;TD&gt;07Jul2020&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;600&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;640&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;C2&lt;/TD&gt;
&lt;TD&gt;05Aug2020&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;400&lt;/TD&gt;
&lt;TD&gt;80&lt;/TD&gt;
&lt;TD&gt;600&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;640&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;M&lt;/TD&gt;
&lt;TD&gt;20Aug2020&lt;/TD&gt;
&lt;TD&gt;1500&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;400&lt;/TD&gt;
&lt;TD&gt;110&lt;/TD&gt;
&lt;TD&gt;510&lt;/TD&gt;
&lt;TD&gt;80&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;110&lt;/TD&gt;
&lt;TD&gt;1150&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;C3&lt;/TD&gt;
&lt;TD&gt;15Sep2020&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;95&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;110&lt;/TD&gt;
&lt;TD&gt;1165&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;C2&lt;/TD&gt;
&lt;TD&gt;21Oct2020&lt;/TD&gt;
&lt;TD&gt;-500&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;-40&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;-40&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;110&lt;/TD&gt;
&lt;TD&gt;1150&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;173&lt;/TD&gt;
&lt;TD&gt;C3&lt;/TD&gt;
&lt;TD&gt;15Nov2020&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;20&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;0.1&lt;/TD&gt;
&lt;TD&gt;1200&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;65&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;100&lt;/TD&gt;
&lt;TD&gt;1165&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 11 Dec 2020 23:42:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/702945#M215342</guid>
      <dc:creator>kashun</dc:creator>
      <dc:date>2020-12-11T23:42:26Z</dc:date>
    </item>
    <item>
      <title>Re: Complex logic with Cumulative Sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/703398#M215510</link>
      <description>&lt;P&gt;If you could explain the desired logic for the calculated fields, I might be able to make some suggestions. .&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Dec 2020 15:17:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/703398#M215510</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2020-12-03T15:17:10Z</dc:date>
    </item>
    <item>
      <title>Re: Complex logic with Cumulative Sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/703413#M215518</link>
      <description>&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13728"&gt;@SASJedi&lt;/a&gt;. Hope this will help.&lt;BR /&gt;1.The data depends on flags and limits to generate new fields as well as accumulated values.&lt;BR /&gt;2. Amount  is displayed in Pay_C if flag is C1 - C3. Amount is displayed in Pay_1 if flag is M.&lt;BR /&gt;3. The data has the limit for C1 - C3.&lt;BR /&gt;Example, C1 - C3 are limits id 173 . i.e. if the row has  Flag is C1 and Amount is 40, then id 173 will have Pay_C to be 20 since the maximum limit is 20 for C1.&lt;BR /&gt;If Amount was to be 15 then Pay_C would have been 15 Since it amount doesn't exceed the limit of C1 =20.&lt;BR /&gt;4. The data has the limit for PAY1 as well.&lt;BR /&gt;Example if PAY1 limit is 1000 and and amount is 300, then PAY1 will be 300. If the amount is 1200, then PAY1 will be 1000 with a remainder of 200 which will be used to calculate PAY2.&lt;BR /&gt;If cumulative sum of PAY1 exceeds the limit, the PAY1 will be zero. For instance row 2 from the data will have 300  under PAY1 since the flag is M. Since row 3 has amount 1300 and flag M, the remaining amount needed to meet the PAY1 limit will be 700 and hence PAY1 will be 700. The remaining 600 will be used to calculate PAY2 (600 * 0.1 =60. Note: use PAY2_DEC). Since PAY1's LIMIT is met, any row after that with flag M will have PAY1 to be zero, unless there is a negative (credit). Also Pay2 has a limit as well.&lt;BR /&gt;If there is a negative amount then the code should check all previous amount to see if there is an exact positive amount and negate its pay_c, pay1 and pay2.&lt;BR /&gt;Example, row 3 and 5 are just negative difference. If cumulative sum of total amount meets 2000 (max_pay) then any pay after should be zero unless a negative amount has been introduced to  change the limit met.&lt;BR /&gt;The total_pay will be sum of pay_c , pay1 and pay2. Since  calculations depend on accumulated &lt;BR /&gt;</description>
      <pubDate>Thu, 03 Dec 2020 15:33:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/703413#M215518</guid>
      <dc:creator>kashun</dc:creator>
      <dc:date>2020-12-03T15:33:48Z</dc:date>
    </item>
    <item>
      <title>Re: Complex logic with Cumulative Sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/704178#M215848</link>
      <description>Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13728"&gt;@SASJedi&lt;/a&gt;, Any luck on this please?</description>
      <pubDate>Mon, 07 Dec 2020 16:01:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/704178#M215848</guid>
      <dc:creator>kashun</dc:creator>
      <dc:date>2020-12-07T16:01:17Z</dc:date>
    </item>
    <item>
      <title>Re: Complex logic with Cumulative Sum using Hash Object</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/705420#M216401</link>
      <description>&lt;P&gt;I know we can create cumulative sum using hash objects. Is there store them and iterate them over per each line?&lt;/P&gt;</description>
      <pubDate>Fri, 11 Dec 2020 23:44:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/705420#M216401</guid>
      <dc:creator>kashun</dc:creator>
      <dc:date>2020-12-11T23:44:57Z</dc:date>
    </item>
    <item>
      <title>Re: Complex logic with Cumulative Sum using Hash Object</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/705456#M216424</link>
      <description>&lt;P&gt;Since you have decided to keep cumulative sums is discrete variables (one for each set of flags), there is no advantage to using a hash object, versus retaining sums for each group.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But if you were to use the same variable for each of them, then you would have a better reason for hash.&amp;nbsp; In such a case the hash object would be keyed on the flag values.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As a general concept using some of your data organization, here's an example of what I mean.&amp;nbsp; Below pay_grp replaces payc and pay1, and pay_cum replaces accum_payc and accum_pay1.&amp;nbsp; But there will be no ambiguity in pay_grp and pay_cum in the output records because they will be accompanied by a flag value.&amp;nbsp; This works because the hash object if keyed on a new variable flg_grp.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know that I didn't program in code to honor the limits.&amp;nbsp; They idea here is to propose a revision of the output data layout that would be a more likely candidate for using a hash object:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE;
input @1 ID @5 Flag $2. @8 Date DATE9.  @18 Amount @24 C1 @27 C2 @30 C3 @33 PAY1_LIMIT @38 PAY2_DEC @42 PAY2_LIMIT @47 MAX_PAY ;
FORMAT DATE DATE9.;
datalines;
173 C1 01JAN2020 100   20 40 15 1000 0.1 1200 2000
173 M  03APR2020 300   20 40 15 1000 0.1 1200 2000
173 M  24APR2020 1300  20 40 15 1000 0.1 1200 2000
173 M  07JUN2020 500   20 40 15 1000 0.1 1200 2000
173 M  13JUN2020 -1300 20 40 15 1000 0.1 1200 2000
173 C1 28JUN2020 40    20 40 15 1000 0.1 1200 2000
173 M  07JUL2020 300   20 40 15 1000 0.1 1200 2000
173 C2 05AUG2020 50    20 40 15 1000 0.1 1200 2000
173 M  20AUG2020 1500  20 40 15 1000 0.1 1200 2000
173 C3 15SEP2020 30    20 40 15 1000 0.1 1200 2000
173 M  21OCT2020 -500  20 40 15 1000 0.1 1200 2000
173 C3 15NOV2020 30    20 40 15 1000 0.1 1200 2000
;
RUN;

data want;
  set have;

  length flg_group $1;
  flg_group=flag;  /* "C1", "C2", "C3" all become "C",  "M"==&amp;gt;"M"*/

  if _n_=1 then do;
    declare hash h ();
	  h.definekey('flg_group');
	  h.definedata('flg_group','flag','pay_grp','pay_cum');
	  h.definedone();
  end;

  if h.find()^=0 then pay_cum=0;  /*If not ready in hash h */

  select(flag);
    when ('c1') pay_grp=c1;
    when ('c2') pay_grp=c2;
    when ('c3') pay_grp=c3;
	when ('m')  pay_grp=pay1;
	otherwise;
  end;

  pay_cum=pay_cum+pay_grp;
  h.replace();
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 12 Dec 2020 19:35:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/705456#M216424</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-12-12T19:35:26Z</dc:date>
    </item>
    <item>
      <title>Re: Complex logic with Cumulative Sum using Hash Object</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/705730#M216546</link>
      <description>Thanks very much &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt; for the input. This gave me a different idea on applying the flags. Was thinking if there was another way to look at the cumulative sums with the limits.</description>
      <pubDate>Mon, 14 Dec 2020 15:17:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-logic-with-Cumulative-Sum-using-Hash-Objects/m-p/705730#M216546</guid>
      <dc:creator>kashun</dc:creator>
      <dc:date>2020-12-14T15:17:06Z</dc:date>
    </item>
  </channel>
</rss>

