<?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: loop queries for multiple calculation in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289899#M59918</link>
    <description>&lt;P&gt;Values only depend on previous obs (assuming proper ordering)&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
length CustomerID	AccountNo $12;
infile datalines missover;
input CustomerID	AccountNo	PrincipleLoss	InterestLoss	CreditBalance;
datalines;
 	12459699	1234567890	200	100	1000
 	12459699	3154645488	400	250	 	
 	12459699	5074723086	500	300	 	
 	12459699	6994800684	750	800	 	
 	12459699	8914878282	120	40	 	
 	13562246	1234557890	454	210	2000
 	13562246	1234567890	454	455	 	
 	65646546	1234577890	44	212	1500
 	65646546	1234587890	21	113
;

data want;
do until(last.CustomerId);
    set  have; by CustomerId;
    creditBalance = coalesce(CreditBalance, Balance, 0);
    Recovery1 = min(PrincipleLoss, CreditBalance);
    Recovery2 = min(InterestLoss, CreditBalance-Recovery1);
    Balance = max(0, CreditBalance - Recovery1 - Recovery2);
    output;
    end;
run;

proc print data=want; 
var CustomerID AccountNo PrincipleLoss InterestLoss CreditBalance 
    Recovery1 Recovery2 Balance;
by CustomerId; id customerId; 
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 05 Aug 2016 22:05:43 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2016-08-05T22:05:43Z</dc:date>
    <item>
      <title>loop queries for multiple calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289821#M59881</link>
      <description>&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Existing Data&lt;/TD&gt;&lt;TD&gt;Require by loop formula&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Customer ID&lt;/TD&gt;&lt;TD&gt;Account No&lt;/TD&gt;&lt;TD&gt;Principle Loss&lt;/TD&gt;&lt;TD&gt;Interest Loss&lt;/TD&gt;&lt;TD&gt;Credit Balance&lt;/TD&gt;&lt;TD&gt;Recovery1&lt;/TD&gt;&lt;TD&gt;Recovery2&lt;/TD&gt;&lt;TD&gt;Balance&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;1234567890&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;3154645488&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;250&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;5074723086&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;6994800684&lt;/TD&gt;&lt;TD&gt;750&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;8914878282&lt;/TD&gt;&lt;TD&gt;120&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;13562246&lt;/TD&gt;&lt;TD&gt;1234557890&lt;/TD&gt;&lt;TD&gt;454&lt;/TD&gt;&lt;TD&gt;210&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;13562246&lt;/TD&gt;&lt;TD&gt;1234567890&lt;/TD&gt;&lt;TD&gt;454&lt;/TD&gt;&lt;TD&gt;455&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;65646546&lt;/TD&gt;&lt;TD&gt;1234577890&lt;/TD&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;212&lt;/TD&gt;&lt;TD&gt;1500&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;65646546&lt;/TD&gt;&lt;TD&gt;1234587890&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;113&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Existing Data&lt;/TD&gt;&lt;TD&gt;Require by loop formula&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Customer ID&lt;/TD&gt;&lt;TD&gt;Account No&lt;/TD&gt;&lt;TD&gt;Principle Loss&lt;/TD&gt;&lt;TD&gt;Interest Loss&lt;/TD&gt;&lt;TD&gt;Credit Balance&lt;/TD&gt;&lt;TD&gt;Recovery1&lt;/TD&gt;&lt;TD&gt;Recovery2&lt;/TD&gt;&lt;TD&gt;Balance&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;1234567890&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;700&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;3154645488&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;250&lt;/TD&gt;&lt;TD&gt;700&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;250&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;5074723086&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;6994800684&lt;/TD&gt;&lt;TD&gt;750&lt;/TD&gt;&lt;TD&gt;800&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;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;12459699&lt;/TD&gt;&lt;TD&gt;8914878282&lt;/TD&gt;&lt;TD&gt;120&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;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;13562246&lt;/TD&gt;&lt;TD&gt;1234557890&lt;/TD&gt;&lt;TD&gt;454&lt;/TD&gt;&lt;TD&gt;210&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;454&lt;/TD&gt;&lt;TD&gt;210&lt;/TD&gt;&lt;TD&gt;1336&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;13562246&lt;/TD&gt;&lt;TD&gt;1234567890&lt;/TD&gt;&lt;TD&gt;454&lt;/TD&gt;&lt;TD&gt;455&lt;/TD&gt;&lt;TD&gt;1336&lt;/TD&gt;&lt;TD&gt;454&lt;/TD&gt;&lt;TD&gt;455&lt;/TD&gt;&lt;TD&gt;427&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;65646546&lt;/TD&gt;&lt;TD&gt;1234577890&lt;/TD&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;212&lt;/TD&gt;&lt;TD&gt;1500&lt;/TD&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;212&lt;/TD&gt;&lt;TD&gt;1244&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;65646546&lt;/TD&gt;&lt;TD&gt;1234587890&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;113&lt;/TD&gt;&lt;TD&gt;1244&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;113&lt;/TD&gt;&lt;TD&gt;1110&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Fri, 05 Aug 2016 15:27:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289821#M59881</guid>
      <dc:creator>ramak</dc:creator>
      <dc:date>2016-08-05T15:27:44Z</dc:date>
    </item>
    <item>
      <title>Re: loop queries for multiple calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289899#M59918</link>
      <description>&lt;P&gt;Values only depend on previous obs (assuming proper ordering)&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
length CustomerID	AccountNo $12;
infile datalines missover;
input CustomerID	AccountNo	PrincipleLoss	InterestLoss	CreditBalance;
datalines;
 	12459699	1234567890	200	100	1000
 	12459699	3154645488	400	250	 	
 	12459699	5074723086	500	300	 	
 	12459699	6994800684	750	800	 	
 	12459699	8914878282	120	40	 	
 	13562246	1234557890	454	210	2000
 	13562246	1234567890	454	455	 	
 	65646546	1234577890	44	212	1500
 	65646546	1234587890	21	113
;

data want;
do until(last.CustomerId);
    set  have; by CustomerId;
    creditBalance = coalesce(CreditBalance, Balance, 0);
    Recovery1 = min(PrincipleLoss, CreditBalance);
    Recovery2 = min(InterestLoss, CreditBalance-Recovery1);
    Balance = max(0, CreditBalance - Recovery1 - Recovery2);
    output;
    end;
run;

proc print data=want; 
var CustomerID AccountNo PrincipleLoss InterestLoss CreditBalance 
    Recovery1 Recovery2 Balance;
by CustomerId; id customerId; 
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 05 Aug 2016 22:05:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289899#M59918</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2016-08-05T22:05:43Z</dc:date>
    </item>
    <item>
      <title>Re: loop queries for multiple calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289956#M59935</link>
      <description>&lt;PRE&gt;
data have;
length CustomerID	AccountNo $12;
infile datalines missover;
input CustomerID	AccountNo	PrincipleLoss	InterestLoss	CreditBalance;
datalines;
 	12459699	1234567890	200	100	1000
 	12459699	3154645488	400	250	 	
 	12459699	5074723086	500	300	 	
 	12459699	6994800684	750	800	 	
 	12459699	8914878282	120	40	 	
 	13562246	1234557890	454	210	2000
 	13562246	1234567890	454	455	 	
 	65646546	1234577890	44	212	1500
 	65646546	1234587890	21	113
;
run;
data want;
 set have;
 by CustomerID;
 retain balance;
 if first.CustomerID then balance=CreditBalance;
 CreditBalance=max(0,balance);
 balance=balance-PrincipleLoss;
 Recovery1=ifn(balance gt 0,PrincipleLoss,max(0,balance+PrincipleLoss));
 balance=balance-InterestLoss;
 Recovery2=ifn(balance gt 0,InterestLoss,max(0,balance+InterestLoss));
 balance=max(0,balance);
run;



&lt;/PRE&gt;</description>
      <pubDate>Sat, 06 Aug 2016 07:02:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/loop-queries-for-multiple-calculation/m-p/289956#M59935</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-08-06T07:02:18Z</dc:date>
    </item>
  </channel>
</rss>

