<?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: Next-Prior logic in Column Matching in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714818#M220726</link>
    <description>&lt;P&gt;Thank you! It worked fine.&lt;/P&gt;
&lt;P&gt;I'm unsure on what format is the&amp;nbsp;&lt;SPAN&gt;sample data accepted into SAS Community&amp;nbsp; so that others could use it for programming purposes. I copy/pasted from Excel.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 27 Jan 2021 21:40:02 GMT</pubDate>
    <dc:creator>sasuser_sk</dc:creator>
    <dc:date>2021-01-27T21:40:02Z</dc:date>
    <item>
      <title>Next-Prior logic in Column Matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714777#M220715</link>
      <description>&lt;P&gt;Hello:&lt;/P&gt;
&lt;P&gt;I use next/prior logic in Brio and looking to build same logic in SAS. I'm looking to create column Next Match(below) and Prior match. Here is my what I asking for help with:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Next match:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;if(Duplicate=0 and (End_Date=Next(Create_date))) then 'No Break'&lt;BR /&gt;elseif(ID_No=Next(ID_No) and (End_Date != Next(Create_date))) then'After few Days'&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Prior match:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;if(ID_No=Prior(ID_No) and (Create_date=Prior(End_Date))) then 'No Break'&lt;BR /&gt;else if(ID_No=Prior(ID_No) and (Create_date != Prior(End_Date))) then 'After few Days'&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="631"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Acct No&lt;/TD&gt;
&lt;TD width="64"&gt;ID No&lt;/TD&gt;
&lt;TD width="64"&gt;Duplicate&lt;/TD&gt;
&lt;TD width="87"&gt;Create date&lt;/TD&gt;
&lt;TD width="64"&gt;End Date&lt;/TD&gt;
&lt;TD width="146"&gt;Next Match&lt;/TD&gt;
&lt;TD width="142"&gt;Prior Match&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;486&lt;/TD&gt;
&lt;TD&gt;486&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20201106&lt;/TD&gt;
&lt;TD&gt;20201113&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;177&lt;/TD&gt;
&lt;TD&gt;177&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20210105&lt;/TD&gt;
&lt;TD&gt;20210111&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;126&lt;/TD&gt;
&lt;TD&gt;126&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20200812&lt;/TD&gt;
&lt;TD&gt;20201027&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;651&lt;/TD&gt;
&lt;TD&gt;651-001&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20200923&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color="#339966"&gt;20200928&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;No Break&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;651&lt;/TD&gt;
&lt;TD&gt;651-001&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color="#339966"&gt;20200928&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;20210119&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;No Break&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;390&lt;/TD&gt;
&lt;TD&gt;390&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20201208&lt;/TD&gt;
&lt;TD&gt;20201214&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;229&lt;/TD&gt;
&lt;TD&gt;229&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20201112&lt;/TD&gt;
&lt;TD&gt;20201211&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;411&lt;/TD&gt;
&lt;TD&gt;411&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20200804&lt;/TD&gt;
&lt;TD&gt;20200814&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;674&lt;/TD&gt;
&lt;TD&gt;674-001&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20201009&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color="#339966"&gt;20201104&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;No Break&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;674&lt;/TD&gt;
&lt;TD&gt;647-001&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color="#339966"&gt;20201104&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;20201105&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;No Break&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;681&lt;/TD&gt;
&lt;TD&gt;681&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;20201023&lt;/TD&gt;
&lt;TD&gt;20201113&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;20200730&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color="#339966"&gt;20200819&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;No Break&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color="#339966"&gt;20200819&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;20201105&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;No Break&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Wed, 27 Jan 2021 20:19:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714777#M220715</guid>
      <dc:creator>sasuser_sk</dc:creator>
      <dc:date>2021-01-27T20:19:39Z</dc:date>
    </item>
    <item>
      <title>Re: Next-Prior logic in Column Matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714807#M220720</link>
      <description>&lt;P&gt;This is untested since you have not put your sample data into the form of a working sas data step (translation: help us help you).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let's assume:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;you have a dataset named HAVE with variable names corresponding to your table header.&lt;/LI&gt;
&lt;LI&gt;dataset HAVE is grouped (not necessarily in ascending or descending order) by ID_NO.&lt;/LI&gt;
&lt;LI&gt;Whenever duplicate=0 there is always a subsequent record with the same ID_NO (I infer that from your rule statement):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;if(Duplicate=0 and (End_Date=Next(Create_date))) then 'No Break'&lt;/STRONG&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Then this sas program is untested, but shows the logic as I understand your rules:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data want (drop=_:);
  set have (keep=id_no);
  by id_no notsorted;    /* Added the notsorted, edit*/

  merge have have (firstobs=2 keep=create_date rename=(create_date=nxt_crdate));
  
  length newvar newvar_prior $20; /* Also editted addition */
  if duplicate=0 and end_date=nxt_crdate then newvar='No Break';
  else if last.id_no=0 and end_date^=nxt_crdate then newvar='After few Days';

  _lag_end_date=lag1(end_date);
  if first.id_no=0 then do;
     if create_date=_lag_end_date then newvar_prior='No Break';
     else newvar_prior='After few Days';
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The SET HAVE statement reads only one variable, ID_NO.&amp;nbsp; It is succeeded with a BY ID_NO NOTSORTED statement, which tells sas to create two temporary dummy variables (first.id_no and last.id_no) indicating whether the observation-in-hand is the first and/or the last for the current ID_NO.&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;The self-merge statement reads all the variables from the current OBS and one variable (create_date renamed to nxt_crdate) from the next obs.&amp;nbsp; This provides a way to look ahead at the next date.&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;The &lt;EM&gt;&lt;STRONG&gt;"if duplicate=0 ..."&lt;/STRONG&gt;&lt;/EM&gt; and &lt;EM&gt;&lt;STRONG&gt;"else if last.id_no=0 ..."&lt;/STRONG&gt;&lt;/EM&gt; statements imitates your rule descriptions.&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;The &lt;EM&gt;&lt;STRONG&gt;lag1(end_date)&lt;/STRONG&gt;&lt;/EM&gt; function creates a fifo queue (1 level deep) that, in this case, returns the prior end_date value.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;The second pair of &lt;EM&gt;&lt;STRONG&gt;"if ...",&amp;nbsp; "else if"&lt;/STRONG&gt;&lt;/EM&gt; imitate your rule descriptions.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Jan 2021 21:13:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714807#M220720</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2021-01-27T21:13:35Z</dc:date>
    </item>
    <item>
      <title>Re: Next-Prior logic in Column Matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714818#M220726</link>
      <description>&lt;P&gt;Thank you! It worked fine.&lt;/P&gt;
&lt;P&gt;I'm unsure on what format is the&amp;nbsp;&lt;SPAN&gt;sample data accepted into SAS Community&amp;nbsp; so that others could use it for programming purposes. I copy/pasted from Excel.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Jan 2021 21:40:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Next-Prior-logic-in-Column-Matching/m-p/714818#M220726</guid>
      <dc:creator>sasuser_sk</dc:creator>
      <dc:date>2021-01-27T21:40:02Z</dc:date>
    </item>
  </channel>
</rss>

