<?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: Calculate Amounts By Group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367137#M275296</link>
    <description>&lt;P&gt;The concept of "backdated to the previous year" is a little unclear, so here's a reasonable guess.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For the monthly data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;by name;&lt;/P&gt;
&lt;P&gt;increment = dif(total_payment);&lt;/P&gt;
&lt;P&gt;if first.name then increment=0;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then to get the annual data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc summary data=want;&lt;/P&gt;
&lt;P&gt;by name;&lt;/P&gt;
&lt;P&gt;var total_payment;&lt;/P&gt;
&lt;P&gt;output out=annual (keep=name amount) sum=amount;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc print data=annual;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;</description>
    <pubDate>Wed, 14 Jun 2017 20:42:45 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2017-06-14T20:42:45Z</dc:date>
    <item>
      <title>Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367131#M275295</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the following dataset. Please note that Paymment is Commulative to the previouse payment.&amp;nbsp;I need to compute the ANNUAL and Monthly payments for the entire dataset. I am using Enterprise Guide, but can use a code to save in a program:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Month&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total Payment&lt;/P&gt;&lt;P&gt;Al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (the data is backdated to the previous year to facilitate the calculations)&lt;/P&gt;&lt;P&gt;Al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jan&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (which means that the payment for this month is 40 only, and so on)&lt;/P&gt;&lt;P&gt;Al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; March&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; June&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;110&lt;/P&gt;&lt;P&gt;Tara&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dec&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&lt;/P&gt;&lt;P&gt;Tara&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jan&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&lt;/P&gt;&lt;P&gt;Tara&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Feb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 35&lt;/P&gt;&lt;P&gt;Tara&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the above example,&amp;nbsp;I need to&amp;nbsp;create&amp;nbsp;2 new columns that shows&amp;nbsp;the payments were as follows:&lt;/P&gt;&lt;P&gt;Annual:&lt;/P&gt;&lt;P&gt;Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Amount&lt;/P&gt;&lt;P&gt;Al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100&lt;/P&gt;&lt;P&gt;Tara&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100&lt;/P&gt;&lt;P&gt;Monthly:&lt;/P&gt;&lt;P&gt;it shows the monthly increment from the previous month.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for looking into this.&lt;/P&gt;&lt;P&gt;Altijani&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 20:04:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367131#M275295</guid>
      <dc:creator>altijani</dc:creator>
      <dc:date>2017-06-14T20:04:26Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367137#M275296</link>
      <description>&lt;P&gt;The concept of "backdated to the previous year" is a little unclear, so here's a reasonable guess.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For the monthly data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;by name;&lt;/P&gt;
&lt;P&gt;increment = dif(total_payment);&lt;/P&gt;
&lt;P&gt;if first.name then increment=0;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then to get the annual data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc summary data=want;&lt;/P&gt;
&lt;P&gt;by name;&lt;/P&gt;
&lt;P&gt;var total_payment;&lt;/P&gt;
&lt;P&gt;output out=annual (keep=name amount) sum=amount;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc print data=annual;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 20:42:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367137#M275296</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-06-14T20:42:45Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367144#M275297</link>
      <description>&lt;P&gt;If this is all of the data in the dataset, you can find the difference for the increments by using a BY&amp;nbsp;statement. &amp;nbsp;If there is more data than this, you will need to use a Proc Sort&amp;nbsp;to sort alphabetically by the Name variable before using a BY statement.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Alternatively you can do something like this and get the same results*:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Data Diff;&lt;BR /&gt;Set Have;&lt;BR /&gt;Difference = Dif(Total_Payment);&lt;BR /&gt;If Difference &amp;lt; 0 Then&lt;BR /&gt;Difference = 0;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*This requires the names to be grouped together with the Total Amounts increasing but does not require the Names to be sorted alphabetically.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the annual data you can use a Proc SQL or a Proc Summary. I'm partial to Proc SQL so here is what I have and this should work assuming all payments are positive.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Proc SQL;&lt;BR /&gt;Create table Annual as&lt;BR /&gt;Select H.Name, H.Total_Payment as Total_Amount&lt;BR /&gt;From Have H&lt;BR /&gt;Where H.Total_Payment = (Select Max(Total_Payment) From Have J Where H.Name = J.Name);&lt;BR /&gt;Quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 21:16:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367144#M275297</guid>
      <dc:creator>jdwaterman91</dc:creator>
      <dc:date>2017-06-14T21:16:42Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367145#M275298</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the responses.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The data has thousands of records, with several in each Name group, but I just wanted to give you the needed details.&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jun 2017 21:25:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367145#M275298</guid>
      <dc:creator>altijani</dc:creator>
      <dc:date>2017-06-14T21:25:10Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367223#M275299</link>
      <description>&lt;P&gt;Like this?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data HAVE;
input NAME $       MONTH $     TOTAL_PAYMENT;
cards;
Al              Dec           10                     (the data is backdated to the previous year to facilitate the calculations)
Al              Jan            50                     (which means that the payment for this month is 40 only, and so on)
Al              March        75    
Al              June         110
Tara          Dec             0
Tara          Jan             20
Tara          Feb            35
Tara          Dec           100
run;

data WANT;
  set HAVE;
  by NAME;
  MONTHLY=TOTAL_PAYMENT-lag(TOTAL_PAYMENT) * ^first.NAME;
  YEARLY +MONTHLY;
  if first.NAME then YEARLY=0;
  else output;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE class="table" rules="all" frame="box" cellspacing="0" cellpadding="5" summary="Procedure Print: Data Set WORK.WANT"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l header" scope="col"&gt;NAME&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;MONTH&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;TOTAL_PAYMENT&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;MONTHLY&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;YEARLY&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;Al&lt;/TD&gt;
&lt;TD class="l data"&gt;Jan&lt;/TD&gt;
&lt;TD class="r data"&gt;50&lt;/TD&gt;
&lt;TD class="r data"&gt;40&lt;/TD&gt;
&lt;TD class="r data"&gt;40&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;Al&lt;/TD&gt;
&lt;TD class="l data"&gt;March&lt;/TD&gt;
&lt;TD class="r data"&gt;75&lt;/TD&gt;
&lt;TD class="r data"&gt;25&lt;/TD&gt;
&lt;TD class="r data"&gt;65&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;Al&lt;/TD&gt;
&lt;TD class="l data"&gt;June&lt;/TD&gt;
&lt;TD class="r data"&gt;110&lt;/TD&gt;
&lt;TD class="r data"&gt;35&lt;/TD&gt;
&lt;TD class="r data"&gt;100&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;Tara&lt;/TD&gt;
&lt;TD class="l data"&gt;Jan&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;Tara&lt;/TD&gt;
&lt;TD class="l data"&gt;Feb&lt;/TD&gt;
&lt;TD class="r data"&gt;35&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;35&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;Tara&lt;/TD&gt;
&lt;TD class="l data"&gt;Dec&lt;/TD&gt;
&lt;TD class="r data"&gt;100&lt;/TD&gt;
&lt;TD class="r data"&gt;65&lt;/TD&gt;
&lt;TD class="r data"&gt;100&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Thu, 15 Jun 2017 04:44:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367223#M275299</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-06-15T04:44:35Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367542#M275300</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have your SQL code running for a day now. Obviously something is not right. Any suggestions? My data has 1.4M obs.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again,&lt;/P&gt;&lt;P&gt;Altijani&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Jun 2017 23:35:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367542#M275300</guid>
      <dc:creator>altijani</dc:creator>
      <dc:date>2017-06-15T23:35:19Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367545#M275301</link>
      <description>&lt;P&gt;running a subquery for each group value is very expensive&lt;/P&gt;</description>
      <pubDate>Thu, 15 Jun 2017 23:55:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367545#M275301</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-06-15T23:55:40Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate Amounts By Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367695#M275302</link>
      <description>&lt;P&gt;Hello.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Without seeing the rest of your data and how it is organized, it is difficult to know what exactly is going on.&lt;/P&gt;&lt;P&gt;The SQL works for calculating the Total_Payment for each of the people you have listed based on the way they are sorted.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Have you tried using the alternative method that Chris posted?&amp;nbsp;&lt;/P&gt;&lt;P&gt;That method also works on the data you have given and as his output shows, lists both the monthly increments and total payment received to date in columns in the same table.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 16 Jun 2017 12:46:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-Amounts-By-Group/m-p/367695#M275302</guid>
      <dc:creator>jdwaterman91</dc:creator>
      <dc:date>2017-06-16T12:46:47Z</dc:date>
    </item>
  </channel>
</rss>

