## Why this simple data step doesn't work? (findw/if/else)

Solved
Highlighted
Frequent Contributor
Posts: 100

# Why this simple data step doesn't work? (findw/if/else)

[ Edited ]

Hello,

If the input variable contains a comma, then the containscomma variable should be set to 1:

``````data _null;
input = "Why, oh why";
if findw(input, ",") > 0 then do; containscomma=1; end;
else containscomma=0;
put containscomma;
run;``````

It does contains a comma, yet containscomma is set to 0.

Can someone please advise on how I can make the code work as intended?

Accepted Solutions
Solution
‎02-14-2018 04:33 AM
Super User
Posts: 9,376

## Re: Why this simple data step doesn't work? (findw/if/else)

Findw is a function for finding a word delimited by certain characters.  Comma is not a word, it is a delimiter.  If you want to find text in another you can use index() - these are all well described in the manual:

``````data _null;
input = "Why, oh why";
containscomma=ifn(index(input,","),1,0);
put containscomma;
run;``````

Note I use the binary choise ifn() function to simplfy the code.  Also, I do not put an operator after the index, basically if index finds the character then the result is a positive number, hence if positive number=true return first, else second.

All Replies
Solution
‎02-14-2018 04:33 AM
Super User
Posts: 9,376

## Re: Why this simple data step doesn't work? (findw/if/else)

Findw is a function for finding a word delimited by certain characters.  Comma is not a word, it is a delimiter.  If you want to find text in another you can use index() - these are all well described in the manual:

``````data _null;
input = "Why, oh why";
containscomma=ifn(index(input,","),1,0);
put containscomma;
run;``````

Note I use the binary choise ifn() function to simplfy the code.  Also, I do not put an operator after the index, basically if index finds the character then the result is a positive number, hence if positive number=true return first, else second.

☑ This topic is solved.