<?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 Unable to use LAG to create a specific sequence in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915172#M360615</link>
    <description>&lt;P&gt;Good morning.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The below dataset I have all but the Wanted column. That is what I require. So for every first.reference the Wanted should be 1. For the next reference, if it is the same value as the reference in the line above, check the FLAG value. If it is the same as the line above, it should be the same as the Wanted value above. If the FLAG value is different from the line above (i.e. from 0 to 1 or 1 to 0), the WANTED value should be lag(Wanted )+ 1. DO that until the next Reference and if it is the first reference start again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have tried so many pieces of code. The lag creates a blank. Also the lag when using a loop seems to keep an old version of the lag. I am just unsure as to where to start...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ta,&lt;/P&gt;&lt;P&gt;Arch&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Month_A&lt;/TD&gt;&lt;TD&gt;Month_B&lt;/TD&gt;&lt;TD&gt;Reference&lt;/TD&gt;&lt;TD&gt;Date_C&lt;/TD&gt;&lt;TD&gt;FLAG&lt;/TD&gt;&lt;TD&gt;Wanted&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Nov-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2/11/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Oct-22&lt;/TD&gt;&lt;TD&gt;Jul-23&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;3/10/2022&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Nov-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;3/10/2022&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;15/05/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Feb-23&lt;/TD&gt;&lt;TD&gt;Sep-23&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;9/02/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Oct-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;9/02/2023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;Dec-23&lt;/TD&gt;&lt;TD&gt;E&lt;/TD&gt;&lt;TD&gt;30/05/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mar-23&lt;/TD&gt;&lt;TD&gt;Mar-23&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;14/03/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Apr-23&lt;/TD&gt;&lt;TD&gt;Jun-23&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;27/04/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Jul-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;27/04/2023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;31/05/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mar-23&lt;/TD&gt;&lt;TD&gt;Apr-23&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;6/03/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;Nov-23&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;6/03/2023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Dec-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;5/12/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
    <pubDate>Thu, 08 Feb 2024 22:52:47 GMT</pubDate>
    <dc:creator>Archenar</dc:creator>
    <dc:date>2024-02-08T22:52:47Z</dc:date>
    <item>
      <title>Unable to use LAG to create a specific sequence</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915172#M360615</link>
      <description>&lt;P&gt;Good morning.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The below dataset I have all but the Wanted column. That is what I require. So for every first.reference the Wanted should be 1. For the next reference, if it is the same value as the reference in the line above, check the FLAG value. If it is the same as the line above, it should be the same as the Wanted value above. If the FLAG value is different from the line above (i.e. from 0 to 1 or 1 to 0), the WANTED value should be lag(Wanted )+ 1. DO that until the next Reference and if it is the first reference start again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have tried so many pieces of code. The lag creates a blank. Also the lag when using a loop seems to keep an old version of the lag. I am just unsure as to where to start...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ta,&lt;/P&gt;&lt;P&gt;Arch&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Month_A&lt;/TD&gt;&lt;TD&gt;Month_B&lt;/TD&gt;&lt;TD&gt;Reference&lt;/TD&gt;&lt;TD&gt;Date_C&lt;/TD&gt;&lt;TD&gt;FLAG&lt;/TD&gt;&lt;TD&gt;Wanted&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Nov-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2/11/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Oct-22&lt;/TD&gt;&lt;TD&gt;Jul-23&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;3/10/2022&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Nov-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;3/10/2022&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;15/05/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Feb-23&lt;/TD&gt;&lt;TD&gt;Sep-23&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;9/02/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Oct-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;9/02/2023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;Dec-23&lt;/TD&gt;&lt;TD&gt;E&lt;/TD&gt;&lt;TD&gt;30/05/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mar-23&lt;/TD&gt;&lt;TD&gt;Mar-23&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;14/03/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Apr-23&lt;/TD&gt;&lt;TD&gt;Jun-23&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;27/04/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Jul-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;27/04/2023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;31/05/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mar-23&lt;/TD&gt;&lt;TD&gt;Apr-23&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;6/03/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;May-23&lt;/TD&gt;&lt;TD&gt;Nov-23&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;6/03/2023&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Dec-23&lt;/TD&gt;&lt;TD&gt;Jan-24&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;5/12/2023&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Thu, 08 Feb 2024 22:52:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915172#M360615</guid>
      <dc:creator>Archenar</dc:creator>
      <dc:date>2024-02-08T22:52:47Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to use LAG to create a specific sequence</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915174#M360616</link>
      <description>&lt;P&gt;No need to use LAG().&amp;nbsp; Just tell SAS to treat FLAG as one of the BY variables.&amp;nbsp; Make sure to include the NOTSORTED keyword since the observations are not actually sorted.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by reference flag notsorted;
  if first.reference then WANT=0;
  WANT + first.flag;
run;

proc print;
 var reference flag wanted want ;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result&lt;/P&gt;
&lt;PRE&gt;Obs    Reference    FLAG    Wanted    WANT

  1        A          1        1        1
  2        B          1        1        1
  3        B          0        2        2
  4        C          1        1        1
  5        D          1        1        1
  6        D          0        2        2
  7        E          1        1        1
  8        F          1        1        1
  9        F          1        1        1
 10        F          0        2        2
 11        G          1        1        1
 12        H          1        1        1
 13        H          0        2        2
 14        H          1        3        3
&lt;/PRE&gt;
&lt;P&gt;If you really did want to use LAG() you could do that also.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For example if you are not positive if the observations are really in chronological order you could include DATE_C in the BY statement so SAS will check.&amp;nbsp; &amp;nbsp;Then use LAG() (or since it is numeric perhaps DIF()) to find when the FLAG variable changed.&amp;nbsp; Make sure to execute the LAG() function on every observations so you are really comparing to the previous observations value.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by reference date_c;
  if first.reference then WANT=0;
  WANT + (first.reference or lag(flag) ne flag);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 08 Feb 2024 23:07:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915174#M360616</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2024-02-08T23:07:31Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to use LAG to create a specific sequence</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915178#M360620</link>
      <description>Tom - thanks for your time. You are right - I missed that BY should have had the other variable in there too. Works like a dream. Thanks so much.</description>
      <pubDate>Thu, 08 Feb 2024 23:35:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unable-to-use-LAG-to-create-a-specific-sequence/m-p/915178#M360620</guid>
      <dc:creator>Archenar</dc:creator>
      <dc:date>2024-02-08T23:35:13Z</dc:date>
    </item>
  </channel>
</rss>

