Help using Base SAS procedures

FINDW Function

Reply
Contributor
Posts: 64

FINDW Function

data test;

set varin;

found=findw('Art festival.','art','','it');

put found=;

run;

The above code is returning the value of found as 0. Anybody knows why? Even though I am ignoring case and removing trailing blanks from the arguments. If I remove the 't' modifier, the value is returned correctly as 1. If I use STRIP function on the second argument, the value is again returned correctly.

Thanks for the help.

Super User
Super User
Posts: 7,079

Re: FINDW Function

Posted in reply to sasmaverick

Probably because it ends up trimming the space out of the list of delimiter characters.  Add 'S' to the modifiers.  Or add other characters such as period and comma to the list of delimiter characters..  Also making the list of delimiters a variable instead of an in-line character constant seems to also make it work.

Respected Advisor
Posts: 4,173

Re: FINDW Function

Posted in reply to sasmaverick

It says in the the docu:

t or T trims trailing blanks from the string, word, and character arguments.

So it appears trimming the character argument removes blanks from the list of word delimiters. Initially not really intuitive to me but then with a bit more thinking isn't this exactly what I would expect to happen if passing in a variable as character argument? So using the 't' switch with an explicit string as character argument is definitely not the right thing to do.

data _null_;

  found1=findw('Art festival.','art',' ','it');

  found2=findw('Art festival.','art','','i');

  found3=findw('Art|festival.','art','|','it');

  put _all_;

  stop;

run;

found1=0 found2=1 found3=1

Ask a Question
Discussion stats
  • 2 replies
  • 812 views
  • 0 likes
  • 3 in conversation