<?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: Search in a dataset for units only containing words in a list in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842697#M82212</link>
    <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let goodPrefix=stringA|stringB;
%let badPrefix=stringC|stringD;

/* Or perhaps */

%let goodPrefix=string[AB];
%let badPrefix=string[^AB];

data want;
set have;
if prxmatch("/^(\s*\b(&amp;amp;goodPrefix.))+/io", variableList) and not
    prxmatch("/\b(&amp;amp;badPrefix.)/io", variableList);
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 05 Nov 2022 21:07:40 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2022-11-05T21:07:40Z</dc:date>
    <item>
      <title>Search in a dataset for units only containing words in a list</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842613#M82208</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I have a dataset that looks like the following (with ~5,000 rows). The VariableList contains strings with certain prefix ("string*") as well as other numbers and characters, always separated by space.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;VariableList&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;stringA stringB 123&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;stringA + stringB &amp;gt; stringC&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;stringA&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A4&lt;/TD&gt;&lt;TD&gt;stringB stringC 456&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A5&lt;/TD&gt;&lt;TD&gt;stringC stringD abc&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And I want to search for units where in the VariableList, the words with prefix include words from a list ("stringA" or "stringB"), but no other prefixed words ("StringC", "StringD", etc). I don't care about the extra strings.&lt;/P&gt;&lt;P&gt;So in this example, I want the new dataset to only contain&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;VariableList&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;stringA stringB 123&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;stringA&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I found a similar question (&lt;A href="https://communities.sas.com/t5/SAS-Procedures/searching-words-in-a-variable/td-p/85846)" target="_blank" rel="noopener"&gt;https://communities.sas.com/t5/SAS-Procedures/searching-words-in-a-variable/td-p/85846)&lt;/A&gt;&amp;nbsp;and tried the PRX function as follows:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;length ID $ 10 VariableList $ 50;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;infile cards dsd dlm='|' truncover ;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;input ID VariableList;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;datalines;&lt;BR /&gt;A1|stringA stringB 123&lt;BR /&gt;A2|stringA + stringB &amp;gt; stringC&lt;BR /&gt;A3|stringA&amp;nbsp;&lt;BR /&gt;A4|stringB stringC 456&lt;BR /&gt;A5|stringC stringD abc&lt;BR /&gt;; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%let matchString=stringA|stringB;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data want;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;set have;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;where prxmatch("/\b(&amp;amp;matchString.)\b/", VariableList);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But this would find all the rows that contain stringA and stringB, including the ones that I don't want (A2 &amp;amp; A4). How do I go about excluding them?&lt;/P&gt;&lt;P&gt;Thanks a lot!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 04 Nov 2022 22:21:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842613#M82208</guid>
      <dc:creator>Nat4</dc:creator>
      <dc:date>2022-11-04T22:21:34Z</dc:date>
    </item>
    <item>
      <title>Re: Search in a dataset for units only containing words in a list</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842637#M82210</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
   length ID $ 10 VariableList $ 50;
   infile cards dsd dlm='|' truncover ;
   input ID VariableList;
   datalines;
A1|stringA stringB 123
A2|stringA + stringB &amp;gt; stringC
A3|stringA 
A4|stringB stringC 456
A5|stringC stringD abc
; run;

data want;
 set have;
 if prxmatch('/\bstring[^AB]+\b/i',VariableList) then delete;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 05 Nov 2022 09:44:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842637#M82210</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-11-05T09:44:45Z</dc:date>
    </item>
    <item>
      <title>Re: Search in a dataset for units only containing words in a list</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842697#M82212</link>
      <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let goodPrefix=stringA|stringB;
%let badPrefix=stringC|stringD;

/* Or perhaps */

%let goodPrefix=string[AB];
%let badPrefix=string[^AB];

data want;
set have;
if prxmatch("/^(\s*\b(&amp;amp;goodPrefix.))+/io", variableList) and not
    prxmatch("/\b(&amp;amp;badPrefix.)/io", variableList);
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 05 Nov 2022 21:07:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842697#M82212</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2022-11-05T21:07:40Z</dc:date>
    </item>
    <item>
      <title>Re: Search in a dataset for units only containing words in a list</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842869#M82219</link>
      <description>&lt;P&gt;Thanks! Wow this is exactly what I was looking for.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can I ask a follow up question? I forgot to mention that "stringA|stringB" is a dynamic list that I read from a metadata file, and the A and B part are not necessarily single letters, say what I wanted to match was actually "stringA13 &amp;amp; string BC9". I think the brackets [...] only work for characters?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So I wanted something similar to&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;if prxmatch('/\bstring[^(A13+BC9)]+\b/i',VariableList) then delete;&lt;/PRE&gt;&lt;P&gt;This seems more complicated than what I thought.&lt;/P&gt;</description>
      <pubDate>Mon, 07 Nov 2022 16:28:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842869#M82219</guid>
      <dc:creator>Nat4</dc:creator>
      <dc:date>2022-11-07T16:28:42Z</dc:date>
    </item>
    <item>
      <title>Re: Search in a dataset for units only containing words in a list</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842871#M82220</link>
      <description>&lt;P&gt;Thanks!! I like how you listed both the good and bad prefixes, and defined the badPrefixes as "not good" -- this is what I needed as I don't know what to exclude beforehand.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sorry that I set the other earlier reply as solution. This is a good one too!&lt;/P&gt;</description>
      <pubDate>Mon, 07 Nov 2022 14:48:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/842871#M82220</guid>
      <dc:creator>Nat4</dc:creator>
      <dc:date>2022-11-07T14:48:51Z</dc:date>
    </item>
    <item>
      <title>Re: Search in a dataset for units only containing words in a list</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/843091#M82226</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/*
OK. Check this one .
*/

data have;
   length ID $ 10 VariableList $ 50;
   infile cards dsd dlm='|' truncover ;
   input ID VariableList;
   datalines;
A1|stringA13 stringBC9 123
A2|stringA13 + stringBC9 &amp;gt; stringC
A3|stringA13 
A4|stringBC9 stringC 456
A5|stringC stringD abc
A6|stringBC8 stringD abc
A7|stringBC8 stringA2 abc
A8|stringA13 stringBC9
;

data want;
 set have; 
 if prxmatch('/string(?!A13|BC9)/i',VariableList) then delete;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 08 Nov 2022 11:35:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Search-in-a-dataset-for-units-only-containing-words-in-a-list/m-p/843091#M82226</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-11-08T11:35:28Z</dc:date>
    </item>
  </channel>
</rss>

