<?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: how to get a as of t-1 minimum value for each customer at time t in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271739#M54060</link>
    <description>&lt;P&gt;I think ballardw has the right approach, but it will take another trick to get correct results.&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 ID;&lt;/P&gt;
&lt;P&gt;retain minrate;&lt;/P&gt;
&lt;P&gt;if first.ID then minrate = rate;&lt;/P&gt;
&lt;P&gt;output;&lt;/P&gt;
&lt;P&gt;minrate = min(minrate, rate);&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The same assumptions are in effect ... data must be in sorted order by ID and date.&lt;/P&gt;</description>
    <pubDate>Thu, 19 May 2016 15:09:46 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2016-05-19T15:09:46Z</dc:date>
    <item>
      <title>how to get a as of t-1 minimum value for each customer at time t</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271726#M54054</link>
      <description>&lt;P&gt;Hi All,&lt;/P&gt;
&lt;P&gt;I have a table example below&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;In this table, there are 3 different accountIDs&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;each accountID starts in different time and stay for various time periods&lt;/LI&gt;
&lt;LI&gt;In each time, there are different rates&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="389"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;AccountID&lt;/TD&gt;
&lt;TD width="75"&gt;Date(t)&lt;/TD&gt;
&lt;TD width="64"&gt;Rate&lt;/TD&gt;
&lt;TD width="186"&gt;AsofDateminus1(t-1)minrate&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;01/01/2000&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.423333&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.423333327&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;04/01/2000&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.2&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.423333327&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;07/01/2000&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.553333&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.2&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;10/01/2000&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.2&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;01/01/2001&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.343333&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.1&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;04/01/2001&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.406667&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.1&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;07/01/2001&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.43&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.1&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;10/01/2001&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.446667&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.1&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;EM&gt;a1&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;01/01/2002&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.64&lt;/EM&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;EM&gt;7.1&lt;/EM&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;07/01/2000&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.553333&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.553333441&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;10/01/2000&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.553333441&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;01/01/2001&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.343333&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;04/01/2001&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.406667&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;07/01/2001&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.43&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;10/01/2001&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.446667&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;a2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;01/01/2002&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.64&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;7.1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a3&lt;/TD&gt;
&lt;TD&gt;01/01/2004&lt;/TD&gt;
&lt;TD&gt;8.8733333&lt;/TD&gt;
&lt;TD&gt;8.873333295&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a3&lt;/TD&gt;
&lt;TD&gt;04/01/2004&lt;/TD&gt;
&lt;TD&gt;8.9833333&lt;/TD&gt;
&lt;TD&gt;8.873333295&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a3&lt;/TD&gt;
&lt;TD&gt;07/01/2004&lt;/TD&gt;
&lt;TD&gt;9.1566668&lt;/TD&gt;
&lt;TD&gt;8.873333295&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a3&lt;/TD&gt;
&lt;TD&gt;10/01/2004&lt;/TD&gt;
&lt;TD&gt;8.8633337&lt;/TD&gt;
&lt;TD&gt;8.873333295&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;a3&lt;/TD&gt;
&lt;TD&gt;01/01/2005&lt;/TD&gt;
&lt;TD&gt;8.7800001&lt;/TD&gt;
&lt;TD&gt;8.863333702&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Task:&lt;/EM&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For each accountID, at each time t, I need to get the minimum of historical rates as of time t-1.&lt;/LI&gt;
&lt;LI&gt;For example, for a1,at time t&amp;nbsp;01/01/2000, as of t-1, the minimum historical rate is the same as current one. As there is&amp;nbsp; no historical rate before that.&lt;/LI&gt;
&lt;LI&gt;However, for a1, when at time t=07/01/2000, the minimum historical rate as of t-1 04/01/2000 is 7.2.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Question:&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Anyone has an idea how to write SAS code to realized it?&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you very much.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 19 May 2016 14:37:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271726#M54054</guid>
      <dc:creator>lucky66</dc:creator>
      <dc:date>2016-05-19T14:37:28Z</dc:date>
    </item>
    <item>
      <title>Re: how to get a as of t-1 minimum value for each customer at time t</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271729#M54055</link>
      <description>&lt;P&gt;Assuming the data is sorted by ID and date&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   set have;
   by  id notsorted;
   retain minrate;
   if first.id then minrate= rate;
   else minrate = min(minrate,rate);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;should get you started&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 19 May 2016 14:50:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271729#M54055</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-05-19T14:50:38Z</dc:date>
    </item>
    <item>
      <title>Re: how to get a as of t-1 minimum value for each customer at time t</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271731#M54056</link>
      <description>&lt;P&gt;Well, not typing in test data so just going to give some pointers here. &amp;nbsp;There are several ways to do this.&lt;/P&gt;
&lt;P&gt;- You could transpose the data up and use arrays.&lt;/P&gt;
&lt;P&gt;- You could retain values into a set of three variables.&lt;/P&gt;
&lt;P&gt;- You could use lag() function to look back, i.e. i&lt;/P&gt;
&lt;PRE&gt;result=min( ifn(lag(accountid)=accountid),lag(rate),999999),
                   ifn(lag2(accountif)=accountid),lag2(rate),999999),
                   ...same for lag3());
&lt;/PRE&gt;
&lt;P&gt;So if there is no previous then 99999 is used which will obviously not be the min.&lt;/P&gt;
&lt;P&gt;- You could also merge on previous values to each row.&lt;/P&gt;
&lt;P&gt;The options are limitless.&lt;/P&gt;</description>
      <pubDate>Thu, 19 May 2016 14:56:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271731#M54056</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2016-05-19T14:56:30Z</dc:date>
    </item>
    <item>
      <title>Re: how to get a as of t-1 minimum value for each customer at time t</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271739#M54060</link>
      <description>&lt;P&gt;I think ballardw has the right approach, but it will take another trick to get correct results.&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 ID;&lt;/P&gt;
&lt;P&gt;retain minrate;&lt;/P&gt;
&lt;P&gt;if first.ID then minrate = rate;&lt;/P&gt;
&lt;P&gt;output;&lt;/P&gt;
&lt;P&gt;minrate = min(minrate, rate);&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The same assumptions are in effect ... data must be in sorted order by ID and date.&lt;/P&gt;</description>
      <pubDate>Thu, 19 May 2016 15:09:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271739#M54060</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2016-05-19T15:09:46Z</dc:date>
    </item>
    <item>
      <title>Re: how to get a as of t-1 minimum value for each customer at time t</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271741#M54061</link>
      <description>&lt;P&gt;Assuming you don't want to include the current record in the calculation of the minimum you need to control the calculation and when the values are output. Untested, and building of&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw﻿&lt;/a&gt;&amp;nbsp;code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data want;
   set have;
   by  id notsorted;
   retain minrate;
   if first.id then minrate= rate;
   output; *Explicitly output before calculation to hold last value;
   minrate = min(minrate,rate);
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 19 May 2016 15:11:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271741#M54061</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-05-19T15:11:20Z</dc:date>
    </item>
    <item>
      <title>Re: how to get a as of t-1 minimum value for each customer at time t</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271782#M54069</link>
      <description>&lt;P&gt;Thank you, everyone above for your replies. Very helpful, let me start with those.&lt;/P&gt;</description>
      <pubDate>Thu, 19 May 2016 17:12:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-get-a-as-of-t-1-minimum-value-for-each-customer-at-time-t/m-p/271782#M54069</guid>
      <dc:creator>lucky66</dc:creator>
      <dc:date>2016-05-19T17:12:26Z</dc:date>
    </item>
  </channel>
</rss>

