Desktop productivity for business analysts and programmers

Using CONTAINS in an IF statement

Accepted Solution Solved
Reply
Contributor
Posts: 22
Accepted Solution

Using CONTAINS in an IF statement

HI,

I am trying to find a way to find character fields that contains some special keywords. 

I tried using something like this:

IF TINT='2' and NAME CONTAINS (' TRUST ', ' TR ');

TINTNAME
1JOSEPH BROWN TRUST
2THE TRUSTWORTHDY TRUST CORP
2JOHN ADAMS TR

I would like to find a way to identify , in this example, the last two observations because they meet the conditions I listed on the IF statement.  I do have millions of records, so this is just an example. Any ideas how to make this easy?

Thanks...


Accepted Solutions
Solution
‎07-03-2017 09:41 AM
Super User
Posts: 11,103

Re: Using CONTAINS in an IF statement

[ Edited ]

How many key "words" are you needing to search for? You aren't going to find a list type function though it may be possible to write one.

FINDW lets you specify only to match words, which are separated by delimiters such as a space so you do not need to try to specify a search string such as ' TR ' with spaces to find the TR at the end of line 3 but not match if in the middle of a word.

 

 

if tint='2' then do;
/* multiple individual searches*/
     if findw(name,'TRUST')>0 then do; <whatever>; end;
     if findw(name,'TR')>0 then do; <whatever>; end;
end;

And from @DBailey:

Others have given data step suggestions...you could also use proc sql (especially if the data are in a rdbms somewhere else)...

 

proc sql;
select * from have where
TINT='2' and
( NAME like '% TRUST %' or name like  '% TR %');
quit;

 

View solution in original post


All Replies
Super User
Super User
Posts: 6,842

Re: Using CONTAINS in an IF statement

IF TINT='2'

  and ( INDEXW( NAME,'TRUST')

    or  INDEXW( NAME,'TR')

       )

;

Solution
‎07-03-2017 09:41 AM
Super User
Posts: 11,103

Re: Using CONTAINS in an IF statement

[ Edited ]

How many key "words" are you needing to search for? You aren't going to find a list type function though it may be possible to write one.

FINDW lets you specify only to match words, which are separated by delimiters such as a space so you do not need to try to specify a search string such as ' TR ' with spaces to find the TR at the end of line 3 but not match if in the middle of a word.

 

 

if tint='2' then do;
/* multiple individual searches*/
     if findw(name,'TRUST')>0 then do; <whatever>; end;
     if findw(name,'TR')>0 then do; <whatever>; end;
end;

And from @DBailey:

Others have given data step suggestions...you could also use proc sql (especially if the data are in a rdbms somewhere else)...

 

proc sql;
select * from have where
TINT='2' and
( NAME like '% TRUST %' or name like  '% TR %');
quit;

 

Trusted Advisor
Posts: 1,228

Re: Using CONTAINS in an IF statement

data want(drop=_name keywords);

set have;

_NAME=NAME;

length keywords $20;

do keywords='TRUST', 'TR';

_NAME = tranwrd(_NAME,strip(keywords),'***');

end;

if TINT=2 and findw(_name,'***');

run;

Super Contributor
Posts: 578

Re: Using CONTAINS in an IF statement

Others have given data step suggestions...you could also use proc sql (especially if the data are in a rdbms somewhere else)...

proc sql;

select * from have where

TINT='2' and

( NAME like '% TRUST %' or name like  '% TR %');

quit;

Super User
Posts: 9,856

Re: Using CONTAINS in an IF statement

IF TINT='2'

  and  prxmatch('/TRUST|TR/',NAME)

;

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 8486 views
  • 0 likes
  • 6 in conversation