<?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: Not understanding the logic behind LAG1() AND INTCK() in my example. in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605166#M175568</link>
    <description>&lt;P&gt;You must not use the lag() function conditionally, as it feeds its FIFO chain only when called.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA WANT;
SET HAVE;
BY Key2 Key1 DESCENDING DE;
l_de = lag(de);
IF ACTION = 1 THEN aFLAG = 1;
IF aFlag AND LAG1(Action) ne 1 THEN
  DD = INTCK('dtday', DE, l_de);
drop l_de;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Mon, 18 Nov 2019 19:24:36 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2019-11-18T19:24:36Z</dc:date>
    <item>
      <title>Not understanding the logic behind LAG1() AND INTCK() in my example.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605163#M175566</link>
      <description>&lt;P&gt;Hi all, When I only use a single Key the below calculates correctly. But once I add in additional everything starts going out of whack and "miscalculating" (from my point of view). Why is this not calculating the difference in days from the PREVIOUS record by KEY?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Working version:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
DATA HAVE;
INPUT Key1 Key2 DE ACTION $;
FORMAT DE DATETIME23.3;
INFORMAT DE DATETIME23.3;
DATALINES;
80040415 80006184 29OCT2019:15:35:00 1
80040415 80006184 29OCT2019:15:34:00 2
80040415 80006184 29OCT2019:15:09:00 1
80040415 80006184 29OCT2019:14:02:00 1
;
RUN;

DATA WANT;
SET HAVE;
BY Key2 Key1 DESCENDING DE;
IF ACTION = 1 THEN aFLAG = 1;
IF aFlag AND LAG1(Action) ne 1 THEN
	DD = INTCK('dtday', DE, LAG1(DE));
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Not Working:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
DATA HAVE;
INPUT Key1 Key2 DE ACTION $;
FORMAT DE DATETIME23.3;
INFORMAT DE DATETIME23.3;
DATALINES;
80004070 80006147 12NOV2019:09:45:00 1
80004070 80006147 05NOV2019:10:34:00 1
80040415 80006184 29OCT2019:15:35:00 1
80040415 80006184 29OCT2019:15:34:00 2
80040415 80006184 29OCT2019:15:09:00 1
80040415 80006184 29OCT2019:14:02:00 1
;
RUN;

DATA WANT;
SET HAVE;
BY Key2 Key1 DESCENDING DE;
IF ACTION = 1 THEN aFLAG = 1;
IF aFlag AND LAG1(Action) ne 1 THEN
	DD = INTCK('dtday', DE, LAG1(DE));
RUN;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 18 Nov 2019 19:13:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605163#M175566</guid>
      <dc:creator>Krueger</dc:creator>
      <dc:date>2019-11-18T19:13:15Z</dc:date>
    </item>
    <item>
      <title>Re: Not understanding the logic behind LAG1() AND INTCK() in my example.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605166#M175568</link>
      <description>&lt;P&gt;You must not use the lag() function conditionally, as it feeds its FIFO chain only when called.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA WANT;
SET HAVE;
BY Key2 Key1 DESCENDING DE;
l_de = lag(de);
IF ACTION = 1 THEN aFLAG = 1;
IF aFlag AND LAG1(Action) ne 1 THEN
  DD = INTCK('dtday', DE, l_de);
drop l_de;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 18 Nov 2019 19:24:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605166#M175568</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-11-18T19:24:36Z</dc:date>
    </item>
    <item>
      <title>Re: Not understanding the logic behind LAG1() AND INTCK() in my example.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605167#M175569</link>
      <description>&lt;P&gt;It is not advisable to use the LAG function conditionally - it wont work correctly otherwise. Put your LAG function in a statement that is executed for every row then use the lagged variable in your conditions:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Action_Lag1 = LAG1(Action);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Nov 2019 19:24:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605167#M175569</guid>
      <dc:creator>SASKiwi</dc:creator>
      <dc:date>2019-11-18T19:24:37Z</dc:date>
    </item>
    <item>
      <title>Re: Not understanding the logic behind LAG1() AND INTCK() in my example.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605171#M175571</link>
      <description>&lt;P&gt;EDIT: ID10T error. If you read this already please ignore.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you again for the help!&lt;/P&gt;</description>
      <pubDate>Mon, 18 Nov 2019 19:37:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605171#M175571</guid>
      <dc:creator>Krueger</dc:creator>
      <dc:date>2019-11-18T19:37:54Z</dc:date>
    </item>
    <item>
      <title>Re: Not understanding the logic behind LAG1() AND INTCK() in my example.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605181#M175574</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/295821"&gt;@Krueger&lt;/a&gt;&amp;nbsp; &amp;nbsp;When you get time, please read this classic explanation of LAG functionality by&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262"&gt;@hashman&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="lia-quilt-column lia-quilt-column-04 lia-quilt-column-left lia-quilt-column-main-left"&gt;
&lt;DIV class="lia-quilt-column-alley lia-quilt-column-alley-left"&gt;
&lt;DIV class="lia-message-author lia-component-author"&gt;
&lt;DIV class="lia-message-author-username"&gt;&lt;SPAN class="UserName lia-user-name lia-user-rank-Valued-Guide"&gt;&lt;IMG class="lia-user-rank-icon lia-user-rank-icon-left" src="https://communities.sas.com/html/rank_icons/valued-guide-rank.png" border="0" alt="Valued Guide" title="Valued Guide" /&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A id="link_68" class="lia-link-navigation lia-page-link lia-user-name-link" href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262" target="_self"&gt;&lt;SPAN class="login-bold"&gt;hashman&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-author-rank"&gt;Valued Guide&lt;/DIV&gt;
&lt;DIV class="lia-message-author-avatar"&gt;
&lt;DIV class="UserAvatar lia-user-avatar lia-component-common-widget-user-avatar"&gt;&lt;A id="link_69" class="UserAvatar lia-link-navigation" tabindex="-1" href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262" target="_self"&gt;&lt;IMG class="lia-user-avatar-message" src="https://communities.sas.com/t5/image/serverpage/image-id/22108i82E2CB3BF672A7F9/image-dimensions/50x50/image-coordinates/0%2C0%2C400%2C400?v=1.0" border="0" alt="hashman" title="book_cover_picture.jpg" /&gt;&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-author-post-count"&gt;Posts: 670&lt;/DIV&gt;
&lt;DIV class="lia-message-author-ipaddress"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-quilt-column lia-quilt-column-20 lia-quilt-column-right lia-quilt-column-main-right"&gt;
&lt;DIV class="lia-quilt-column-alley lia-quilt-column-alley-right"&gt;
&lt;DIV class="lia-message-heading lia-component-message-header"&gt;
&lt;DIV class="lia-quilt-row lia-quilt-row-standard"&gt;
&lt;DIV class="lia-quilt-column lia-quilt-column-20 lia-quilt-column-left"&gt;
&lt;DIV class="lia-quilt-column-alley lia-quilt-column-alley-left"&gt;
&lt;DIV class="lia-message-subject"&gt;
&lt;H2&gt;Re: Difficulty resetting Lag to zero (permanently)&lt;/H2&gt;
&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;
&lt;DIV class="MessageReadByModeratorCell lia-moderation-moderated"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-quilt-column lia-quilt-column-04 lia-quilt-column-right"&gt;
&lt;DIV class="lia-quilt-column-alley lia-quilt-column-alley-right"&gt;
&lt;DIV class="lia-message-options"&gt;
&lt;DIV id="actionMenuDropDown_11" class="lia-menu-navigation-wrapper lia-menu-action message-menu"&gt;
&lt;DIV class="lia-menu-navigation"&gt;
&lt;DIV class="dropdown-default-item"&gt;&lt;A id="dropDownLink_11" class="lia-js-menu-opener default-menu-option lia-js-click-menu lia-link-navigation" title="Show option menu" role="button" href="https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577868/highlight/true#" aria-haspopup="true" aria-expanded="false" aria-label="Show option menu" target="_blank"&gt;Options&lt;/A&gt;
&lt;DIV class="dropdown-positioning"&gt;
&lt;DIV class="dropdown-positioning-static"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="reply-to-stamp"&gt;&lt;SPAN class="reply-author"&gt;&lt;A href="https://communities.sas.com/t5/SAS-Programming/Difficulty-resetting-Lag-to-zero-permanently/m-p/577868#M163793" target="_blank"&gt;Posted in reply to&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN title="Message from 07-30-2019"&gt;crawfe&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P class="lia-message-dates lia-message-post-date lia-component-post-date-last-edited"&gt;&lt;SPAN class="DateTime lia-message-posted-on lia-component-common-widget-date"&gt;&lt;SPAN class="local-date"&gt;‎07-30-2019&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class="local-time"&gt;05:26 PM&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV id="messagebodydisplay_0_10" class="lia-message-body lia-component-body"&gt;
&lt;DIV class="lia-message-body-content"&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/user/viewprofilepage/user-id/268817" target="_blank"&gt;@crawfe&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;When you use the LAG&lt;EM&gt;n&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;function, you need to understand its nature. To recap:&lt;/P&gt;
&lt;P&gt;-- LAG&lt;EM&gt;n&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;is a queue of&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;N&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;items in memory occupying&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;&amp;lt;item length&amp;gt;&lt;/EM&gt;*&lt;EM&gt;N&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;bytes. If the queue is numeric,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;&amp;lt;item length&amp;gt;&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;= 8.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- Every time LAG&lt;EM&gt;n&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;is called&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;for the same allocated queue&lt;/EM&gt;, the item in the front of the queue is ejected (called&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;dequeueing&lt;/EM&gt;), and the value of the argument enters the rear of the queue (called&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;enqueueing&lt;/EM&gt;), displacing the rest of the items 1 position towards the front.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- "For the same allocated queue" means that each time the compiler sees another reference to LAG&lt;EM&gt;n&lt;/EM&gt;, it allocates a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;separate&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;queue with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;N&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;items. Thus,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;x = lag (x) ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;x = lag (x) ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;is not at all the same as:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;do i = 1 to 2 ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; x = lag (x) ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;end ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is because in the former case, the compiler has seen 2 LAG references and organized 2 separate,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;completely independent&lt;/EM&gt;, queues. Thus, the first&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="courier new,courier"&gt;x=lag(x)&lt;/FONT&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;causes the dequeing and enqueueing only in the first LAG queue, and the second&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="courier new,courier"&gt;x=lag(x)&lt;/FONT&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;does the same only for the second queue. In the latter case, the compiler sees only one LAG reference and therefore organizes a single LAG queue, so that each time the DO loop iterates,&amp;nbsp;the dequeing and enqueueing occur in the same, single, LAG queue.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- Thus, a LAGn queue cannot be "cleared up" by doing anything with the variables, to which a call to the LAGn function assigns the dequeued value. It can be cleared up only by calling LAG&lt;EM&gt;n&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for the same queue (i.e. in a loop)&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;N&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;times, so that the item currently in the back of the queue is moved forward to the front of it and gets dequeued. The LAG&lt;EM&gt;n&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;argument used in this action should be given the value to which you want the queue reinitialized - for example, a missing value or zero. This way, when after that you call LAGn again to create your assigned lag values, the first item dequeued will be that value.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After these prelim notes, it should be clear how to clear your queues before each BY group:&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token procnames"&gt;data&lt;/SPAN&gt; have &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                              
  &lt;SPAN class="token keyword"&gt;input&lt;/SPAN&gt; sn &lt;SPAN class="token function"&gt;count&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                       
  &lt;SPAN class="token keyword"&gt;cards&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                
&lt;SPAN class="token number"&gt;11075652&lt;/SPAN&gt;  &lt;SPAN class="token number"&gt;12&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075652&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;4&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075652&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;3&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075652&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075652&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075682&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075682&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;2&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075682&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;2&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075682&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;2&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075682&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;0&lt;/SPAN&gt;                             
&lt;SPAN class="token number"&gt;11075682&lt;/SPAN&gt;   &lt;SPAN class="token number"&gt;2&lt;/SPAN&gt;                             
&lt;SPAN class="token procnames"&gt;run&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                    
                                         
&lt;SPAN class="token procnames"&gt;data&lt;/SPAN&gt; want &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                              
  &lt;SPAN class="token keyword"&gt;if&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;0&lt;/SPAN&gt; &lt;SPAN class="token keyword"&gt;then&lt;/SPAN&gt; &lt;SPAN class="token keyword"&gt;set&lt;/SPAN&gt; have &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt; &lt;SPAN class="token comment"&gt;/*keep the original variable order*/&lt;/SPAN&gt;                   
  &lt;SPAN class="token function"&gt;count&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;0&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;          &lt;SPAN class="token comment"&gt;/*you want to initialize LAGs to 0*/&lt;/SPAN&gt;                   
  do _n_ &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt; to &lt;SPAN class="token number"&gt;6&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;    &lt;SPAN class="token comment"&gt;/*loop 6 times, as LAG6 is longest*/&lt;/SPAN&gt;                  
    link &lt;SPAN class="token function"&gt;lag&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;         &lt;SPAN class="token comment"&gt;/*use LINK to have the compiler see each LAGn just once*/&lt;/SPAN&gt;                  
  end &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                  
  do until &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;last&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;sn&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                   
    &lt;SPAN class="token keyword"&gt;set&lt;/SPAN&gt; have &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                           
    &lt;SPAN class="token statement"&gt;by&lt;/SPAN&gt; sn &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                              
    link &lt;SPAN class="token function"&gt;lag&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;         &lt;SPAN class="token comment"&gt;/*use LINK to have the compiler see each LAGn just once*/&lt;/SPAN&gt;                           
    cum_sum &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;sum&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; of lag1&lt;SPAN class="token operator"&gt;-&lt;/SPAN&gt;lag6&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    output &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                             
  end &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                  
  return &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                               
    &lt;SPAN class="token function"&gt;lag&lt;/SPAN&gt;: lag1 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag1 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag2 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag2 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag3 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag3 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag4 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag4 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag5 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag5 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag6 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag6 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
  return &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                               
&lt;SPAN class="token procnames"&gt;run&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                    
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This way, the LAG&lt;EM&gt;n&lt;/EM&gt;&amp;nbsp;variables will remain 0 for the first&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;N&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;records in each BY group, as they should. Alternatively, you can reinitialize the queues with missing values - it won't affect CUM_SUM, but&amp;nbsp; in this case, the LAGn variables will remain missing for the first N records in each BY group, and coding will be a bit terser:&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token procnames"&gt;data&lt;/SPAN&gt; want &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                              
  do until &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;last&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;sn&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                   
    &lt;SPAN class="token keyword"&gt;set&lt;/SPAN&gt; have &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                           
    &lt;SPAN class="token statement"&gt;by&lt;/SPAN&gt; sn &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                              
    link &lt;SPAN class="token function"&gt;lag&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                           
    cum_sum &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;sum&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; of lag1&lt;SPAN class="token operator"&gt;-&lt;/SPAN&gt;lag6&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    output &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                             
  end &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                  
  &lt;SPAN class="token function"&gt;count&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                            
  do _n_ &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt; to &lt;SPAN class="token number"&gt;6&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                      
    link &lt;SPAN class="token function"&gt;lag&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                           
  end &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                  
  return &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                               
    &lt;SPAN class="token function"&gt;lag&lt;/SPAN&gt;: lag1 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag1 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag2 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag2 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag3 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag3 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag4 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag4 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag5 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag5 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
         lag6 &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; lag6 &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;count&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;           
  return &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                               
&lt;SPAN class="token procnames"&gt;run&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;                                    
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Mon, 18 Nov 2019 19:55:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Not-understanding-the-logic-behind-LAG1-AND-INTCK-in-my-example/m-p/605181#M175574</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-11-18T19:55:08Z</dc:date>
    </item>
  </channel>
</rss>

