<?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 Use two input tables to perform text matching in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729862#M227203</link>
    <description>&lt;P&gt;Hey SAS Community,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Asked a question yesterday, but wanted to create a new post which contains more of the specifics I am working with.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two input tables:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The first table (denoted &lt;STRONG&gt;Have1&lt;/STRONG&gt;)&amp;nbsp;contains the columns &lt;STRONG&gt;CodeName&lt;/STRONG&gt; and &lt;STRONG&gt;CodeKeywords&lt;/STRONG&gt; in the following format:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;CodeName&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; &amp;nbsp; CodeKeywords&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;AIS&amp;nbsp; TEST&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; &amp;nbsp; &amp;nbsp; ais-test | pressure-drop&lt;/P&gt;&lt;P&gt;FIELD INSTRUMENT ERROR&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; psd&lt;/P&gt;&lt;P&gt;GVL TEST&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; &amp;nbsp; &amp;nbsp;GVL drop&lt;/P&gt;&lt;P&gt;LIFT ISSUE&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; &amp;nbsp;lift | slackline&lt;/P&gt;&lt;P&gt;SOLID LOADING&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; pbu&lt;/P&gt;&lt;P&gt;PRODUCTION BOTTLENECK&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resd&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;These keywords are entered by engineers in an application and are retrieved by a PROC HTTP call, as such I cannot guarantee the uniqueness of the keywords. As such, I am happy for the first or last match to be the assigned &lt;STRONG&gt;Code&lt;/STRONG&gt;&amp;nbsp;in the event of multiple matches&lt;STRONG&gt;.&lt;/STRONG&gt; Moreover, the keywords are set up for use with prxmatch such that a keyword like "ais-test | pressure-drop" would match comments containing either "ais-test" OR "pressure-drop".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The second table (denoted&lt;STRONG&gt; Have2&lt;/STRONG&gt;) contains the columns&amp;nbsp;&lt;STRONG&gt;Date&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;Comment&lt;/STRONG&gt; - where the comment is text written by an engineer and can be missing:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Date&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;Daily Comment&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;27MAR2021&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/STRONG&gt;Encountered issues with PSD&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Had issues with the lift system, no actions taken&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Experienced pressure-drop&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RESD during morning routine&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;No issues encountered&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So from the above tables, my desired output would be as follows:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Date&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; Daily Comment&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CodeSugg&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;27MAR2021&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;Encountered issues with PSD&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; &amp;nbsp; FIELD INSTRUMENT ERROR &amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Had issues with the lift system, no actions taken&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIFT ISSUE&amp;nbsp;&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Experienced pressure-drop&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; AIS&amp;nbsp; TEST&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RESD during morning routine&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; &amp;nbsp; PRODUCTION BOTTLENECK&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No issues encountered&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As illustrated by the above tables, I use the keywords to search the comments for a match - for instance, when finding the word &lt;EM&gt;RESD&lt;/EM&gt; in the "&lt;EM&gt;RESD &lt;/EM&gt;during morning routine" comment the comment should be labelled by the&amp;nbsp;&lt;STRONG&gt;Production Bottleneck&amp;nbsp;&lt;/STRONG&gt;code. Until now, I've used prxmatch for this purpose. Additionally, I'd like the resulting &lt;STRONG&gt;Want&amp;nbsp;&lt;/STRONG&gt;table to have the same&amp;nbsp;number of rows as the&amp;nbsp;&lt;STRONG&gt;Have2&amp;nbsp;&lt;/STRONG&gt;table (i.e., all comments present in resulting&amp;nbsp;&lt;STRONG&gt;Want&lt;/STRONG&gt; table). Note also that if there is no match, no Label should be added in the&amp;nbsp;&lt;STRONG&gt;CodeSugg&lt;/STRONG&gt; column for the corresponding comment value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Previously I hardcoded this and it was working satisfactorily:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;data want;
	set have;
	%if %symexist(ASV_FAILURE) %then %do;
		if prxmacth("/&amp;amp;ASV_FAILURE./i", loss_comment) then CODE_SUGG = "AVS Failure";
	%end;
run;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am now trying to create a more "dynamic" code to facilitate for new unknown codes which may be added in the future. For this purpose I've created the following script:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;proc sql noprint;
	select count(*)
   into :rowCountHave1
   from Have1;
quit;

%macro suggestCode();
	
	data want;

		%let iter = 1;
		
		set Have2;
		%let comment=DAILY_COMMENT;
	
		%do %while (&amp;amp;iter. &amp;lt;= &amp;amp;rowCountHave1.);
			set Have1(firstobs=&amp;amp;iter. obs=&amp;amp;iter.);

				%let keyword=strip(CodeKeywords);
				%let code=strip(CodeName);
			
				%if prxmatch("/%str(&amp;amp;keyword.)/i", &amp;amp;comment.) %then CODESUGG=&amp;amp;lcode.;;

				%let iter=%eval(&amp;amp;iter.+1);
		%end;
		
	run;

%mend;

%suggestCode();&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The rationale behind the above code was that for each &lt;STRONG&gt;comment&lt;/STRONG&gt; I would iterate through the table containing&amp;nbsp;the&amp;nbsp;&lt;STRONG&gt;codes&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;keywords&lt;/STRONG&gt; and check for a match. Disclaimer - I have very little experience with looping in SAS and SAS programming in general and this code is currently not working as expected and I encounter the following error without really understanding why:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;- ERROR: Required operator not found in expression: prxmatch("/&amp;amp;keyword./i.", &amp;amp;comment.) - ERROR: The macro SUGGESTCODE will stop executing&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I figured the easiest solution for my task was to use a do-while loop for each row in the table &lt;STRONG&gt;(Have1)&amp;nbsp;&lt;/STRONG&gt;containing&amp;nbsp;&lt;STRONG&gt;codes&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;keywords&lt;/STRONG&gt; and check for a match for each comment in the&amp;nbsp;&lt;STRONG&gt;Have2&lt;/STRONG&gt; table. Would greatly appreciate any suggestions and comments on how far I am off to get this approach to work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 30 Mar 2021 04:49:48 GMT</pubDate>
    <dc:creator>larsc</dc:creator>
    <dc:date>2021-03-30T04:49:48Z</dc:date>
    <item>
      <title>Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729862#M227203</link>
      <description>&lt;P&gt;Hey SAS Community,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Asked a question yesterday, but wanted to create a new post which contains more of the specifics I am working with.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two input tables:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The first table (denoted &lt;STRONG&gt;Have1&lt;/STRONG&gt;)&amp;nbsp;contains the columns &lt;STRONG&gt;CodeName&lt;/STRONG&gt; and &lt;STRONG&gt;CodeKeywords&lt;/STRONG&gt; in the following format:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;CodeName&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; &amp;nbsp; CodeKeywords&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;AIS&amp;nbsp; TEST&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; &amp;nbsp; &amp;nbsp; ais-test | pressure-drop&lt;/P&gt;&lt;P&gt;FIELD INSTRUMENT ERROR&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; psd&lt;/P&gt;&lt;P&gt;GVL TEST&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; &amp;nbsp; &amp;nbsp;GVL drop&lt;/P&gt;&lt;P&gt;LIFT ISSUE&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; &amp;nbsp;lift | slackline&lt;/P&gt;&lt;P&gt;SOLID LOADING&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; pbu&lt;/P&gt;&lt;P&gt;PRODUCTION BOTTLENECK&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resd&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;These keywords are entered by engineers in an application and are retrieved by a PROC HTTP call, as such I cannot guarantee the uniqueness of the keywords. As such, I am happy for the first or last match to be the assigned &lt;STRONG&gt;Code&lt;/STRONG&gt;&amp;nbsp;in the event of multiple matches&lt;STRONG&gt;.&lt;/STRONG&gt; Moreover, the keywords are set up for use with prxmatch such that a keyword like "ais-test | pressure-drop" would match comments containing either "ais-test" OR "pressure-drop".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The second table (denoted&lt;STRONG&gt; Have2&lt;/STRONG&gt;) contains the columns&amp;nbsp;&lt;STRONG&gt;Date&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;Comment&lt;/STRONG&gt; - where the comment is text written by an engineer and can be missing:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Date&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;Daily Comment&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;27MAR2021&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/STRONG&gt;Encountered issues with PSD&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Had issues with the lift system, no actions taken&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Experienced pressure-drop&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RESD during morning routine&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;No issues encountered&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So from the above tables, my desired output would be as follows:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Date&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; Daily Comment&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CodeSugg&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;27MAR2021&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;Encountered issues with PSD&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; &amp;nbsp; FIELD INSTRUMENT ERROR &amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Had issues with the lift system, no actions taken&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIFT ISSUE&amp;nbsp;&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Experienced pressure-drop&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; AIS&amp;nbsp; TEST&amp;nbsp;&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RESD during morning routine&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; &amp;nbsp; PRODUCTION BOTTLENECK&lt;BR /&gt;27MAR2021&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No issues encountered&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As illustrated by the above tables, I use the keywords to search the comments for a match - for instance, when finding the word &lt;EM&gt;RESD&lt;/EM&gt; in the "&lt;EM&gt;RESD &lt;/EM&gt;during morning routine" comment the comment should be labelled by the&amp;nbsp;&lt;STRONG&gt;Production Bottleneck&amp;nbsp;&lt;/STRONG&gt;code. Until now, I've used prxmatch for this purpose. Additionally, I'd like the resulting &lt;STRONG&gt;Want&amp;nbsp;&lt;/STRONG&gt;table to have the same&amp;nbsp;number of rows as the&amp;nbsp;&lt;STRONG&gt;Have2&amp;nbsp;&lt;/STRONG&gt;table (i.e., all comments present in resulting&amp;nbsp;&lt;STRONG&gt;Want&lt;/STRONG&gt; table). Note also that if there is no match, no Label should be added in the&amp;nbsp;&lt;STRONG&gt;CodeSugg&lt;/STRONG&gt; column for the corresponding comment value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Previously I hardcoded this and it was working satisfactorily:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;data want;
	set have;
	%if %symexist(ASV_FAILURE) %then %do;
		if prxmacth("/&amp;amp;ASV_FAILURE./i", loss_comment) then CODE_SUGG = "AVS Failure";
	%end;
run;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am now trying to create a more "dynamic" code to facilitate for new unknown codes which may be added in the future. For this purpose I've created the following script:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;proc sql noprint;
	select count(*)
   into :rowCountHave1
   from Have1;
quit;

%macro suggestCode();
	
	data want;

		%let iter = 1;
		
		set Have2;
		%let comment=DAILY_COMMENT;
	
		%do %while (&amp;amp;iter. &amp;lt;= &amp;amp;rowCountHave1.);
			set Have1(firstobs=&amp;amp;iter. obs=&amp;amp;iter.);

				%let keyword=strip(CodeKeywords);
				%let code=strip(CodeName);
			
				%if prxmatch("/%str(&amp;amp;keyword.)/i", &amp;amp;comment.) %then CODESUGG=&amp;amp;lcode.;;

				%let iter=%eval(&amp;amp;iter.+1);
		%end;
		
	run;

%mend;

%suggestCode();&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The rationale behind the above code was that for each &lt;STRONG&gt;comment&lt;/STRONG&gt; I would iterate through the table containing&amp;nbsp;the&amp;nbsp;&lt;STRONG&gt;codes&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;keywords&lt;/STRONG&gt; and check for a match. Disclaimer - I have very little experience with looping in SAS and SAS programming in general and this code is currently not working as expected and I encounter the following error without really understanding why:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;- ERROR: Required operator not found in expression: prxmatch("/&amp;amp;keyword./i.", &amp;amp;comment.) - ERROR: The macro SUGGESTCODE will stop executing&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I figured the easiest solution for my task was to use a do-while loop for each row in the table &lt;STRONG&gt;(Have1)&amp;nbsp;&lt;/STRONG&gt;containing&amp;nbsp;&lt;STRONG&gt;codes&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;keywords&lt;/STRONG&gt; and check for a match for each comment in the&amp;nbsp;&lt;STRONG&gt;Have2&lt;/STRONG&gt; table. Would greatly appreciate any suggestions and comments on how far I am off to get this approach to work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 30 Mar 2021 04:49:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729862#M227203</guid>
      <dc:creator>larsc</dc:creator>
      <dc:date>2021-03-30T04:49:48Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729903#M227216</link>
      <description>How do you know that first one matches with AIS TEST?&lt;BR /&gt;&lt;BR /&gt;Are you set on macros? I would have assumed a temporary array would be a touch more effective/faster here.</description>
      <pubDate>Mon, 29 Mar 2021 22:06:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729903#M227216</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2021-03-29T22:06:24Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729909#M227218</link>
      <description>&lt;P&gt;How consistent are these for containing the "key words"? I ask because your first example value of "&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Encountered issues with PSD" contains none of the "keywords" of "ais -test" or "pressure drop". if PSD stands for "pressure drop" then it appears that you should have "PSD" in the keywords for Ais Test. But you have PSD in the keywords for "Field Instrument Error" and that is not the result for the data value of "&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Encountered issues with PSD".&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It seems like your rules may not be firm or rigorous enough to be coding yet.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Would "slack line" be considered the same as "slackline"?&lt;/P&gt;</description>
      <pubDate>Mon, 29 Mar 2021 23:17:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729909#M227218</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-03-29T23:17:25Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729952#M227228</link>
      <description>&lt;P&gt;Hi Reeza, sorry that was an "end of the day" error by me - it should always be matching the code containing the keyword. In this case it should match the code which has the keyword "psd".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am not set on using macros - the reason it is set up in a (likely) less-then-effective manner can probably be attributed to my lack of experience with the SAS programming language. This approach was the one that I intuitively thought of and I have not yet worked with arrays in SAS.&lt;/P&gt;</description>
      <pubDate>Tue, 30 Mar 2021 04:57:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729952#M227228</guid>
      <dc:creator>larsc</dc:creator>
      <dc:date>2021-03-30T04:57:53Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729956#M227230</link>
      <description>&lt;P&gt;HI Ballardw,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Like mentioned in the post above, the first instance was an error by me. The example has been updated and is now labelled appropriately.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am actually a bit unsure if "slack line" would match "slackline", I'd have to perform a test when getting to work. However, for the purpose of my code you can assume that it should be exact text matching.&lt;/P&gt;</description>
      <pubDate>Tue, 30 Mar 2021 05:11:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729956#M227230</guid>
      <dc:creator>larsc</dc:creator>
      <dc:date>2021-03-30T05:11:38Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729982#M227250</link>
      <description>&lt;P&gt;Here is an example of one way to use a temporary array to search for specific "keywords" in text.&lt;/P&gt;
&lt;PRE&gt;data textlines;
   infile datalines truncover;
   input text $ 1-30 ;
datalines;
Some string value
Another text line
Junk Junk Junk
;

data arrayexample;
   set textlines;
   array key (5) $ 15 _temporary_ ('TEXT' 'LINE' 'STRING' 'JUNK' 'ABC');
   array r   (5) ;
   do i=1 to dim(key);
      r[i]= index(upcase(text),strip(key[i]))&amp;gt;0;
   end;
   drop i;
run;
&lt;/PRE&gt;
&lt;P&gt;In this case I am placing a result of "found" into a 1/0 coded result variable r where 1 will indicate 'word found'. Note that R1=1 means the first word by order in the Key list is found, R2=2 means the second and so one.&lt;/P&gt;
&lt;P&gt;I start with this because we have no idea just how complex your comments might be and this will find the cases where multiple keywords are found.&lt;/P&gt;
&lt;P&gt;For those meanings with multiple key words a separate pass through the R array variables could be used to set another variable using the Max function with two or more R variables such as:&lt;/P&gt;
&lt;P&gt;Text_or_line = max(R[1], R[2]); to create 1/0 flag numeric variable or if you absolutely NEVER have multiple code values you could use a series of IF/Then such as this to set a single value:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If max(R[1],R[2]) = 1 then codevalue='Text or line found';&lt;/P&gt;
&lt;P&gt;Else if R[3]=1&amp;nbsp;&amp;nbsp;&amp;nbsp; then codevalue= 'String found';&lt;/P&gt;
&lt;P&gt;else if R[4]=1&amp;nbsp;&amp;nbsp; then codevalue= 'Junk found';&lt;/P&gt;
&lt;P&gt;else if R[5]=1&amp;nbsp; then codevalue= 'ABC found';&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Which could also be written as a Select&lt;/P&gt;
&lt;PRE&gt;   select ;
      When (R[1],R[2]) codevalue='Text or line found';
      When (R[3])      codevalue= 'String found';
      When (R[4])      codevalue= 'Junk found';
      When (R[5])      codevalue= 'ABC found';
      otherwise;
   end;
&lt;/PRE&gt;
&lt;P&gt;With either of these you likely want to set a length for the "Codevalue" variable before assigning a value to control the length of the text.&lt;/P&gt;
&lt;P&gt;The _temporary_ in the Key array means that the values are not added to the data set. When creating such an array you need to make sure that specify a number of elements (5) in the example, the length of the longest text value, $ 15 in the example, and the values in a desired order. Note that each individual value is separate, no "list" unless you want to parse each value as well. The comparison I used, INDEX will find "string" if it appears in "stringcombo" so you may want the INDEXW or FINDW function instead. Strip is used on the Key values because some of the comparisons will "pad" the value to the length of the defined value not find "string" because it is looking for "string &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ". Strip removes the trailing padded values. I'm sort of old school and when looking for exact matches pretty much always force case to match. The function FINDW has a setting for ignore case for comparisons.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 30 Mar 2021 06:58:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/729982#M227250</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-03-30T06:58:35Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730325#M227401</link>
      <description>&lt;P&gt;Something like this should work (untested, please adapt):&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;data WANT;
  if 0 then set HAVE1 nobs=NOBS;
  set HAVE2;
  do I=1 to NOBS;
    set HAVE1 point=I;
    if prxmatch(catt('/',CODEKEYWORDS,'/i'), trim(COMMENT) ) then CODESUGG=CODENAME;
  end;
run;&lt;/LI-CODE&gt;
&lt;P&gt;Another method could use a hash table, but the syntax above is simpler.&lt;/P&gt;
&lt;P&gt;or if the HAVE1 table is large, load it beforehand using SASFILE.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Mar 2021 08:11:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730325#M227401</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-03-31T08:11:15Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730353#M227417</link>
      <description>&lt;P&gt;Thank you for your thorough response&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;,&amp;nbsp;I have not worked with arrays in SAS before so this was a very interesting approach.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I will try and implement a working example from the code you have created based on my data.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Mar 2021 10:24:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730353#M227417</guid>
      <dc:creator>larsc</dc:creator>
      <dc:date>2021-03-31T10:24:01Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730355#M227419</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/16961"&gt;@ChrisNZ&lt;/a&gt;,&amp;nbsp;this worked like a charm! I like the simplicity of the syntax as it will ease the possible debugging other team members will have to perform in the future.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Out of curiosity, and with no expactation for you to spend more time on my issue, I tried a different apporach for solving my issue for my data using macro functions:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
%macro loopOverComments();

	data WANT;
		set HAVE2;
		
		call symputx('comment', COMMENT, 'g');
		call execute('%findCode');

		if symexist('code') then do;
			sugg_loss = symget('code');
			call symdel('code');
		end;

	run;

%mend;

%macro findCode();

	data temp;
		set HAVE1;

		call symputx('keywords', CodeKeywords, 'g');

		if prxmatch("/&amp;amp;keywords/i", "&amp;amp;comment") then do;
			call symputx('code', CodeName, 'g');
			stop;
		end;

	run;

%mend;

%loopOverComments();	&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Would you happen to know why this approach is not working? I have tested the macro variables and, for instance, the "comment" macro is available in the %findcode macro function.&lt;/P&gt;</description>
      <pubDate>Wed, 31 Mar 2021 10:43:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730355#M227419</guid>
      <dc:creator>larsc</dc:creator>
      <dc:date>2021-03-31T10:43:53Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730356#M227420</link>
      <description>&lt;P&gt;Call execute stacks up commands to execute after the data step finishes.&lt;/P&gt;
&lt;P&gt;It looks like you are expecting the result of one data step, the "if symexist('code')&amp;nbsp; to be available in the other and the timing is just not there.&lt;/P&gt;
&lt;P&gt;There is another issue about the timing of using a macro variable created in a data step later in the same data step.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Run the code with: options mprint; set and you may see more details about how the macro calls are behaving.&lt;/P&gt;</description>
      <pubDate>Wed, 31 Mar 2021 11:02:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730356#M227420</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-03-31T11:02:12Z</dc:date>
    </item>
    <item>
      <title>Re: Use two input tables to perform text matching</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730531#M227477</link>
      <description>&lt;P&gt;&lt;EM&gt;Would you happen to know why this approach is not working?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;As mentioned call execute&amp;nbsp;&lt;SPAN style="font-family: inherit;"&gt;stacks the code to run after the data step, unless it's pure macro code.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Consider:&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let a=0;
data _null_;
  RC= dosubl(" data _null_; call symput('a','1'); run; ") ;
  A=symget('a');
  put A=;
run;
data _null_;
  call execute(" %let a=2; ") ;
  A=symget('a');
  put A=;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;A=1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;A=2&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Mar 2021 21:58:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-two-input-tables-to-perform-text-matching/m-p/730531#M227477</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-03-31T21:58:39Z</dc:date>
    </item>
  </channel>
</rss>

