<?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 not taking the value in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427768#M105544</link>
    <description>&lt;P&gt;Code doesn't match the output, for example there's no LB2 mentioned anywhere in your code or source data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what do you have, and what do you expect and the exact code you tried please.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/182636"&gt;@Diemo&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;So, I have a dataset&lt;/P&gt;
&lt;PRE&gt;DATA CLASS;&lt;BR /&gt; INPUT ONE 1-2 TWO 3-4 COUNT 5-20;&lt;BR /&gt;datalines;&lt;BR /&gt;0 0 30&lt;BR /&gt;1 0 541&lt;BR /&gt;2 0 1525&lt;BR /&gt;3 0 5&lt;BR /&gt;0 1 3&lt;BR /&gt;1 1 229&lt;BR /&gt;2 1 642&lt;BR /&gt;3 1 3&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/PRE&gt;
&lt;P&gt;And I want to convert count to a Lower bound and an upper bound, using some pretty simple rules:&lt;/P&gt;
&lt;P&gt;if (ONE=0) then LB=0&lt;/P&gt;
&lt;P&gt;else LB=LAG(UB)+1&lt;/P&gt;
&lt;P&gt;UB=LB+count -1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;so, in SAS I programmed this:&lt;/P&gt;
&lt;P&gt;data class2;&lt;/P&gt;
&lt;P&gt;set class;&lt;/P&gt;
&lt;P&gt;LB=LAG(UB)+1;&lt;BR /&gt;if (ONE=0) then LB=0;&lt;/P&gt;
&lt;P&gt;UB =LB+count;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But this just gives me&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV align="center"&gt;ONE TWO COUNT LB UB LB2
&lt;TABLE cellspacing="0" cellpadding="5"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;30&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;0&lt;/TD&gt;
&lt;TD&gt;541&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;0&lt;/TD&gt;
&lt;TD&gt;1525&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;0&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;0&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;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;229&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;1&lt;/TD&gt;
&lt;TD&gt;642&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;.&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;what is going on?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 15 Jan 2018 17:07:54 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2018-01-15T17:07:54Z</dc:date>
    <item>
      <title>LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427762#M105540</link>
      <description>&lt;P&gt;So, I have a dataset&lt;/P&gt;&lt;PRE&gt;DATA CLASS;&lt;BR /&gt; INPUT ONE 1-2 TWO 3-4 COUNT 5-20;&lt;BR /&gt;datalines;&lt;BR /&gt;0 0 30&lt;BR /&gt;1 0 541&lt;BR /&gt;2 0 1525&lt;BR /&gt;3 0 5&lt;BR /&gt;0 1 3&lt;BR /&gt;1 1 229&lt;BR /&gt;2 1 642&lt;BR /&gt;3 1 3&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/PRE&gt;&lt;P&gt;And I want to convert count to a Lower bound and an upper bound, using some pretty simple rules:&lt;/P&gt;&lt;P&gt;if (ONE=0) then LB=0&lt;/P&gt;&lt;P&gt;else LB=LAG(UB)+1&lt;/P&gt;&lt;P&gt;UB=LB+count -1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;so, in SAS I programmed this:&lt;/P&gt;&lt;P&gt;data class2;&lt;/P&gt;&lt;P&gt;set class;&lt;/P&gt;&lt;P&gt;LB=LAG(UB)+1;&lt;BR /&gt;if (ONE=0) then LB=0;&lt;/P&gt;&lt;P&gt;UB =LB+count;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But this just gives me&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="branch"&gt;&lt;DIV align="center"&gt;ONE TWO COUNT LB UB LB2 &lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30&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;0&lt;/TD&gt;&lt;TD&gt;541&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&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;0&lt;/TD&gt;&lt;TD&gt;1525&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&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;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&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;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;229&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&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;1&lt;/TD&gt;&lt;TD&gt;642&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&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;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;what is going on?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;</description>
      <pubDate>Mon, 15 Jan 2018 16:55:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427762#M105540</guid>
      <dc:creator>Diemo</dc:creator>
      <dc:date>2018-01-15T16:55:33Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427768#M105544</link>
      <description>&lt;P&gt;Code doesn't match the output, for example there's no LB2 mentioned anywhere in your code or source data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what do you have, and what do you expect and the exact code you tried please.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/182636"&gt;@Diemo&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;So, I have a dataset&lt;/P&gt;
&lt;PRE&gt;DATA CLASS;&lt;BR /&gt; INPUT ONE 1-2 TWO 3-4 COUNT 5-20;&lt;BR /&gt;datalines;&lt;BR /&gt;0 0 30&lt;BR /&gt;1 0 541&lt;BR /&gt;2 0 1525&lt;BR /&gt;3 0 5&lt;BR /&gt;0 1 3&lt;BR /&gt;1 1 229&lt;BR /&gt;2 1 642&lt;BR /&gt;3 1 3&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/PRE&gt;
&lt;P&gt;And I want to convert count to a Lower bound and an upper bound, using some pretty simple rules:&lt;/P&gt;
&lt;P&gt;if (ONE=0) then LB=0&lt;/P&gt;
&lt;P&gt;else LB=LAG(UB)+1&lt;/P&gt;
&lt;P&gt;UB=LB+count -1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;so, in SAS I programmed this:&lt;/P&gt;
&lt;P&gt;data class2;&lt;/P&gt;
&lt;P&gt;set class;&lt;/P&gt;
&lt;P&gt;LB=LAG(UB)+1;&lt;BR /&gt;if (ONE=0) then LB=0;&lt;/P&gt;
&lt;P&gt;UB =LB+count;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But this just gives me&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV align="center"&gt;ONE TWO COUNT LB UB LB2
&lt;TABLE cellspacing="0" cellpadding="5"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;30&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;0&lt;/TD&gt;
&lt;TD&gt;541&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;0&lt;/TD&gt;
&lt;TD&gt;1525&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;0&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;0&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;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;229&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;1&lt;/TD&gt;
&lt;TD&gt;642&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&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;1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;.&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;what is going on?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jan 2018 17:07:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427768#M105544</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-15T17:07:54Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427776#M105547</link>
      <description>&lt;P&gt;And what did you expect those statements to do?&amp;nbsp; Let's look at them.&amp;nbsp; First you make a new data step that reads from your original dataset.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data class2;
  set class;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Then in the next statement.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;LB=LAG(UB)+1;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You reference two new variables,&amp;nbsp; LB and UB.&amp;nbsp; Since LB and UB were not defined before SAS will make them numeric and give them missing values.&amp;nbsp; The LAG() function will push the current value onto a stack and return the previous value from the stack. On the first iteration the returned value will be missing since nothing has yet been pushed down. And on all the other interations it will return the missing value pushed down from the LAG() call on the previous iteration.&amp;nbsp; So LB will be set to missing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now on the next statement&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if (ONE=0) then LB=0;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;you conditionally set LB to zero.&amp;nbsp; So on any observations where ONE = 1 then LB will be 0.&lt;/P&gt;
&lt;P&gt;Then&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;UB =LB+count;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;you add the variable COUNT to the variable LB and store it into UB.&amp;nbsp; But since LB is missing for any observation where ONE is not&amp;nbsp;equal to 1 this will force LB to be missing also.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The SAS log should show you where you are generating missing values.&lt;/P&gt;
&lt;PRE&gt;28   data class2;
29     set class;
30     LB=LAG(UB)+1;
31     if (ONE=0) then LB=0;
32     UB =LB+count;
33   run;

NOTE: Missing values were generated as a result of performing an operation on missing values.
      Each place is given by: (Number of times) at (Line):(Column).
      8 at 30:13   6 at 32:9
NOTE: There were 8 observations read from the data set WORK.CLASS.
NOTE: The data set WORK.CLASS2 has 8 observations and 5 variables.&lt;/PRE&gt;
&lt;P&gt;What are you trying to find? The min() and max() of count?&amp;nbsp; The SUM() of count?&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please show what your desired output should be?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jan 2018 17:36:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427776#M105547</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-01-15T17:36:01Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427796#M105551</link>
      <description>&lt;P&gt;Yeah you can ignore LB2. It is just a check to see what LAG(UB) was actually giving me (all missing values).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data class2;&lt;/P&gt;&lt;P&gt;set class;&lt;/P&gt;&lt;P&gt;LB=LAG(UB)+1;&lt;/P&gt;&lt;P&gt;LB2=LAG(UB);&lt;/P&gt;&lt;P&gt;if (ONE=0) then LB=0;&lt;/P&gt;&lt;P&gt;UB =LB+count;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jan 2018 19:06:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427796#M105551</guid>
      <dc:creator>Diemo</dc:creator>
      <dc:date>2018-01-15T19:06:47Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427799#M105553</link>
      <description>&lt;P&gt;What I expect to end up with is a data set as follows:&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;ONE TWO COUNT LB UB&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;541&lt;/TD&gt;&lt;TD&gt;31&lt;/TD&gt;&lt;TD&gt;572&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1525&lt;/TD&gt;&lt;TD&gt;573&lt;/TD&gt;&lt;TD&gt;2098&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;2099&lt;/TD&gt;&lt;TD&gt;2104&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;229&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;331&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;642&lt;/TD&gt;&lt;TD&gt;332&lt;/TD&gt;&lt;TD&gt;974&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;975&lt;/TD&gt;&lt;TD&gt;978&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was under the impression that the lines were sent in sequentially - i.e. SAS would do line 1, then Line2 , then Line3, etc.&amp;nbsp; So, on my first iteration, LAG(UB) returns missing (as UB is all missing). But ONE==0 so therefore LB=0, then UB=LB(0) +count = 30 (which is what I get. On the second iteration, LB=LAG(UB)=30, and UB is then 31+541 = 572. And so on.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;And on all the other interations it will return the missing value pushed down from the LAG() call on the previous iteration.&amp;nbsp; So LB will be set to missing.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN&gt;I guess that this is where the issue is.&amp;nbsp; &amp;nbsp;Why is it that LAG is not updating to the last value but keeping the missing values, even though the value of UB is changed?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jan 2018 19:13:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427799#M105553</guid>
      <dc:creator>Diemo</dc:creator>
      <dc:date>2018-01-15T19:13:34Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427815#M105554</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/182636"&gt;@Diemo&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;What I expect to end up with is a data set as follows:&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;ONE TWO COUNT LB UB&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE cellspacing="0" cellpadding="5"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;30&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;541&lt;/TD&gt;
&lt;TD&gt;31&lt;/TD&gt;
&lt;TD&gt;572&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1525&lt;/TD&gt;
&lt;TD&gt;573&lt;/TD&gt;
&lt;TD&gt;2098&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;2099&lt;/TD&gt;
&lt;TD&gt;2104&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;229&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;331&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;642&lt;/TD&gt;
&lt;TD&gt;332&lt;/TD&gt;
&lt;TD&gt;974&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;975&lt;/TD&gt;
&lt;TD&gt;978&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I was under the impression that the lines were sent in sequentially - i.e. SAS would do line 1, then Line2 , then Line3, etc.&amp;nbsp; So, on my first iteration, LAG(UB) returns missing (as UB is all missing). But ONE==0 so therefore LB=0, then UB=LB(0) +count = 30 (which is what I get. On the second iteration, LB=LAG(UB)=30, and UB is then 31+541 = 572. And so on.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;And on all the other interations it will return the missing value pushed down from the LAG() call on the previous iteration.&amp;nbsp; So LB will be set to missing.&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN&gt;I guess that this is where the issue is.&amp;nbsp; &amp;nbsp;Why is it that LAG is not updating to the last value but keeping the missing values, even though the value of UB is changed?&lt;/SPAN&gt;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The statements execute in order and do what they are designed to do.&amp;nbsp; The LAG() function call on the first assignment statement cannot look into the future and know what value is going to be assigning to the UB variable two statements later!!&amp;nbsp; LAG() just returns the value that the variable had the last time that specific LAG() function call ran.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You don't want LAG() you just want to RETAIN the value from the previous observation.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data class2;
  set class;
  lb=ub+1;
  if (ONE=0) then do;
    LB=0; ub=0;
  end;
  UB+count;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    ONE    TWO    COUNT      lb      ub

 1      0      0        30       0      30
 2      1      0       541      31     571
 3      2      0      1525     572    2096
 4      3      0         5    2097    2101
 5      0      1         3       0       3
 6      1      1       229       4     232
 7      2      1       642     233     874
 8      3      1         3     875     877&lt;/PRE&gt;</description>
      <pubDate>Mon, 15 Jan 2018 20:00:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427815#M105554</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-01-15T20:00:34Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427816#M105555</link>
      <description>Hmm, ok. So what does LAG() actually do (I was under the impression that LAG() was how you retained a value for future processing, but that seems to be incorrect.&lt;BR /&gt;</description>
      <pubDate>Mon, 15 Jan 2018 20:04:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427816#M105555</guid>
      <dc:creator>Diemo</dc:creator>
      <dc:date>2018-01-15T20:04:51Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427819#M105556</link>
      <description>&lt;P&gt;Read the description I wrote before and read the manual.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It returns the previous value that it stored the last time it executed.&amp;nbsp; It has nothing to do with previous observations.&amp;nbsp; Just previous times that you executed the function. And if you have more than one LAG() function in the same dataset step they each keep their own stack of values, even if they are referencing (storing/retrieving) the same variable.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Consider it like a stack of trays in a cafeteria.&amp;nbsp; When you walk in you take the top tray off the stack and place the tray you came in with onto the stack.&amp;nbsp; Then the next time you do the same thing so you take out the tray you put in the previous time and put in the tray you currently have.&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jan 2018 20:13:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427819#M105556</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-01-15T20:13:55Z</dc:date>
    </item>
    <item>
      <title>Re: LAG not taking the value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427829#M105558</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/182636"&gt;@Diemo&lt;/a&gt; wrote:&lt;BR /&gt;Hmm, ok. So what does LAG() actually do (I was under the impression that LAG() was how you retained a value for future processing, but that seems to be incorrect.&lt;BR /&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;That would be RETAIN&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jan 2018 20:40:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-not-taking-the-value/m-p/427829#M105558</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-15T20:40:29Z</dc:date>
    </item>
  </channel>
</rss>

