<?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: lag function issue in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104626#M21837</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry about that, the typo was in my post, not in the code. That isn't the issue&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 12 Jun 2013 20:02:12 GMT</pubDate>
    <dc:creator>AllSoEasy</dc:creator>
    <dc:date>2013-06-12T20:02:12Z</dc:date>
    <item>
      <title>lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104623#M21834</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to calculate forecasts of a variable, I have a value for the variable in the first observation, and then the rest of the rows of data having a missing value in this column - because that is the value i am trying to calculate within my data step. I use the lag function to get previous value when I encounter my first missing value that i need to calculate, it works for the first iteration, and then my lags all return missing value and I can't calculate more than one row of data, and I do not understand why the lag function is returning a missing value when there is clearly data present in the previous row.&lt;/P&gt;&lt;P&gt;I.E:&lt;/P&gt;&lt;P&gt;original data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Flat_rate&lt;/P&gt;&lt;P&gt;0.2434583666&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;goes to:&lt;/P&gt;&lt;P&gt;Flat_rate&lt;/P&gt;&lt;P&gt;0.2434583666&lt;/P&gt;&lt;P&gt;0.2408806974&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and the remaining rows still have missing values, the code I am using:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data forecasts;&lt;/P&gt;&lt;P&gt;set mydata;&lt;/P&gt;&lt;P&gt;lag_flat_rate = lag(Flat_Rate);&lt;/P&gt;&lt;P&gt;&amp;nbsp; lag_d_flat_rate = lag(d_Flat_Rate);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;put d_Flat_Rate= lag_flat_rate= lag_d_flat_rate= Flat_Rate= _N_=;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if missing(Flat_rate) then do;&lt;/P&gt;&lt;P&gt;d_Flat_Rate=lag_d_flat_rate + /*some arithmetic*/ ;&lt;/P&gt;&lt;P&gt;Flat_Rate = d_Flat_Rate + lag_flat_rate;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Some output from the log:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;d_Flat_Rate=-0.031821212 lag_flat_rate=. lag_d_flat_rate=. Flat_Rate=0.2434583666 _N_=1&lt;/P&gt;&lt;P&gt;d_Flat_Rate=. lag_flat_rate=0.2434583666 lag_d_flat_rate=-0.031821212 Flat_Rate=. _N_=2&lt;/P&gt;&lt;P&gt;d_Flat_Rate=. lag_flat_rate=. lag_d_flat_rate=. Flat_Rate=. _N_=3&lt;/P&gt;&lt;P&gt;d_Flat_Rate=. lag_flat_rate=. lag_d_flat_rate=. Flat_Rate=. _N_=4&lt;/P&gt;&lt;P&gt;d_Flat_Rate=. lag_flat_rate=. lag_d_flat_rate=. Flat_Rate=. _N_=5&lt;/P&gt;&lt;P&gt;d_Flat_Rate=. lag_flat_rate=. lag_d_flat_rate=. Flat_Rate=. _N_=6&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any ideas as to why I cannot calculate as I go? How else could I possibly use data that I've calculated in a previous observation for the current calculation?&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 19:51:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104623#M21834</guid>
      <dc:creator>AllSoEasy</dc:creator>
      <dc:date>2013-06-12T19:51:20Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104624#M21835</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;typo...&lt;/P&gt;&lt;P&gt;d_Flat_Rate=lag_d_flate_rate + /*some arithmetic*/ ;&lt;/P&gt;&lt;P&gt;&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; lag_d_flat_rate&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 19:59:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104624#M21835</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2013-06-12T19:59:13Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104625#M21836</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi AllSoEasy,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I might be wrong but my understanding of how lag works is that the value for the next iteration is established when you call the lag function in the current iteration. So what is means in practice is that when you do "&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;lag_flat_rate = lag(Flat_Rate);&lt;/SPAN&gt;" at your second observation, the current value of "Flat_Rate" is put in the buffer, that is missing. So even if the value of "Flat_Rate" is changed later in the current iteration, that buffer used by the lag function is not updated. Adding a second "&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;lag_flat_rate = lag(Flat_Rate);&lt;/SPAN&gt;" after the value has been updated will give you the result you expect.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope this helps you.&lt;/P&gt;&lt;P&gt;Yoan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 20:02:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104625#M21836</guid>
      <dc:creator>yoanbolduc</dc:creator>
      <dc:date>2013-06-12T20:02:06Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104626#M21837</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry about that, the typo was in my post, not in the code. That isn't the issue&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 20:02:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104626#M21837</guid>
      <dc:creator>AllSoEasy</dc:creator>
      <dc:date>2013-06-12T20:02:12Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104627#M21838</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;STRONG style="font-size: 12px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;A _jive_internal="true" class="jiveTT-hover-user jive-username-link" data-avatarid="-1" data-externalid="" data-presence="null" data-userid="817233" data-username="yoanbolduc" href="https://communities.sas.com/people/yoanbolduc" id="jive-81723371554729687333803" style="padding: 0 3px 0 0; font-weight: inherit; font-style: inherit; font-size: 1.1em; font-family: inherit; color: #0e66ba;"&gt;yoanbolduc&lt;/A&gt;- &lt;/STRONG&gt;Thank you for the suggestion, so you mean such as:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;data forecasts;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;set mydata;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;lag_flat_rate = lag(Flat_Rate);&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt; lag_d_flat_rate = lag(d_Flat_Rate);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;put d_Flat_Rate= lag_flat_rate= lag_d_flat_rate= Flat_Rate= _N_=;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; if missing(Flat_rate) then do;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;d_Flat_Rate=lag_d_flat_rate + /*some arithmetic*/ ;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Flat_Rate = d_Flat_Rate + lag_flat_rate;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;EM&gt;&lt;STRONG&gt;lag_flat_rate = lag(Flat_Rate);&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;EM&gt;&lt;STRONG&gt;lag_d_flat_rate = lag(d_Flat_Rate);&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;end;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;??&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;-That produced the same result as before&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 20:08:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104627#M21838</guid>
      <dc:creator>AllSoEasy</dc:creator>
      <dc:date>2013-06-12T20:08:18Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104628#M21839</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;All good comments about a tricky subject.&amp;nbsp; Here's an even easier way:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data forecasts;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lag_flat_rate = flat_rate;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lag_d_flat_rate = d_flat_rate;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set mydata;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; * calculations and PUT statements, but no LAG functions;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As long as you're using SET, not INPUT, all variables coming from the source data set are automatically retained.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 20:16:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104628#M21839</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2013-06-12T20:16:55Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104629#M21840</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; You did it right, but apparently this approach doesn't work in all cases. The test I had done was simpler. I just looked for a different approach but Astounding did beat me with a better solution for your case.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In the case you needed to use the input statement instead of set, here is what I came up with (which is not as elegant as the solution proposed by Astounding).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data work.toto;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input value;&lt;/P&gt;&lt;P&gt;&amp;nbsp; retain lag_value;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if missing(value) then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value = lag_value+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; lag_value = value;&lt;/P&gt;&lt;P&gt;datalines;;;&lt;/P&gt;&lt;P&gt;0&lt;/P&gt;&lt;P&gt;2&lt;/P&gt;&lt;P&gt;4&lt;/P&gt;&lt;P&gt;6&lt;/P&gt;&lt;P&gt;8&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;;;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So basically I reproduced the functionnality of the lag function using a retain statement. This one does work with input but is not very elegant.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 20:25:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104629#M21840</guid>
      <dc:creator>yoanbolduc</dc:creator>
      <dc:date>2013-06-12T20:25:12Z</dc:date>
    </item>
    <item>
      <title>Re: lag function issue</title>
      <link>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104630#M21841</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you yoanbolduc, another helpful suggestion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But many thanks to Astounding!! Once again you have provided me with a very elegant solution that 100% resolves my issue. Can't tell you how much I appreciate it!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Ryan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Jun 2013 20:51:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/lag-function-issue/m-p/104630#M21841</guid>
      <dc:creator>AllSoEasy</dc:creator>
      <dc:date>2013-06-12T20:51:46Z</dc:date>
    </item>
  </channel>
</rss>

