<?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: logic behind lag() when using with first. ?? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311440#M67303</link>
    <description>&lt;P&gt;LAG() returns values based on the previous calls. It knows nothing about observations or data step iterations. &amp;nbsp;The reason the first one does not do what you want is because use did not call LAG() for every value. &amp;nbsp;Try this little data step and look at the results.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
  do i=1 to 10 ;
    lagall = lag(i);
    if mod(i,2)=0 then lageven=lag(i);
    else lagodd = lag(i);
    put (i lag: ) (=);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Mon, 14 Nov 2016 15:52:17 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2016-11-14T15:52:17Z</dc:date>
    <item>
      <title>logic behind lag() when using with first. ??</title>
      <link>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311438#M67301</link>
      <description>&lt;P&gt;I want the difference of latest amount &amp;amp; previous amount according to loan_id, In Try1 I'm getting not correct output then I tried Try2&lt;/P&gt;&lt;P&gt;which worked but i'm not able to understand why Try1 Got failed ??&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Try1:&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data loan1;&lt;BR /&gt;input loan_id date ddmmyy10. amount;&lt;BR /&gt;format date ddmmyy10.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 10/11/2015 800&lt;BR /&gt;1 12/11/2015 400&lt;BR /&gt;2 09/11/2015 800&lt;BR /&gt;2 10/11/2015 0&lt;BR /&gt;3 01/11/2015 2000&lt;BR /&gt;1 11/11/2015 600&lt;BR /&gt;3 02/11/2015 800&lt;BR /&gt;3 03/11/2015 600&lt;BR /&gt;2 08/11/2015 1000&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sort data=loan1;&lt;BR /&gt;by loan_id descending date;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;set loan1;&lt;BR /&gt;by loan_id;&lt;BR /&gt;if first.loan_id then n=1;&lt;BR /&gt;else n+1;&lt;BR /&gt;if n=2 then diff_amt=amount-lag1(amount);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc print data=want;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Output :&amp;nbsp;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;SAS Output&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;DIV class="branch"&gt;&lt;DIV&gt;&lt;DIV align="center"&gt;Obs loan_id date amount n diff_amt 1 2 3 4 5 6 7 8 9 &lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;12/11/2015&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11/11/2015&lt;/TD&gt;&lt;TD&gt;600&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/11/2015&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10/11/2015&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;09/11/2015&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08/11/2015&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;03/11/2015&lt;/TD&gt;&lt;TD&gt;600&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;02/11/2015&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;01/11/2015&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Try 2:&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This gave me correc o/p :&amp;nbsp;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;set loan1;&lt;BR /&gt;by loan_id;&lt;BR /&gt;if first.loan_id then n=1;&lt;BR /&gt;else n+1;&lt;BR /&gt;prev_value=lag1(amount);&lt;BR /&gt;if n=2 then diff_amt=amount-prev_value;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc print data=want;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Nov 2016 15:40:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311438#M67301</guid>
      <dc:creator>atul_desh</dc:creator>
      <dc:date>2016-11-14T15:40:11Z</dc:date>
    </item>
    <item>
      <title>Re: logic behind lag() when using with first. ??</title>
      <link>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311440#M67303</link>
      <description>&lt;P&gt;LAG() returns values based on the previous calls. It knows nothing about observations or data step iterations. &amp;nbsp;The reason the first one does not do what you want is because use did not call LAG() for every value. &amp;nbsp;Try this little data step and look at the results.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
  do i=1 to 10 ;
    lagall = lag(i);
    if mod(i,2)=0 then lageven=lag(i);
    else lagodd = lag(i);
    put (i lag: ) (=);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 14 Nov 2016 15:52:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311440#M67303</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2016-11-14T15:52:17Z</dc:date>
    </item>
    <item>
      <title>Re: logic behind lag() when using with first. ??</title>
      <link>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311458#M67315</link>
      <description>&lt;P&gt;This is a good opportunity to benefit from multiperior lags, and&amp;nbsp;arrays with lower bounds of 0:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards&lt;/P&gt;
&lt;P&gt;Mark&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
  array L{0:1} lageven  lagodd;
  do I=1 to 10;
    L{mod(i,2)} = lag2(i);
    put (i lag:) (=);
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 14 Nov 2016 16:47:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311458#M67315</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2016-11-14T16:47:37Z</dc:date>
    </item>
    <item>
      <title>Re: logic behind lag() when using with first. ??</title>
      <link>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311459#M67316</link>
      <description>&lt;P&gt;This program does not require sorting.&amp;nbsp; Instead it holds the "lagged values" in a hash table.&amp;nbsp; No need for the lag function:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;regards,&lt;/P&gt;
&lt;P&gt;Mark&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data loan1;
input loan_id date ddmmyy10. amount;
format date ddmmyy10.;
datalines;
1 10/11/2015 800
1 12/11/2015 400
2 09/11/2015 800
2 10/11/2015 0
3 01/11/2015 2000
1 11/11/2015 600
3 02/11/2015 800
3 03/11/2015 600
2 08/11/2015 1000
;
run;

data want;
  set loan1;
  attrib prior_amt length=8;
  if _n_=1 then do;
    declare hash h();
	 h.definekey('loan_id');
	 h.definedata('prior_amt');
	 h.definedone();
  end;
  rc=h.find();

  if rc^=0 then diff_amt=.;
  else diff_amt=amount-prior_amt;

  rc=h.replace(key:loan_id,data:amount);
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 14 Nov 2016 16:58:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/logic-behind-lag-when-using-with-first/m-p/311459#M67316</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2016-11-14T16:58:09Z</dc:date>
    </item>
  </channel>
</rss>

