BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
munitech4u
Quartz | Level 8

I have a variable which is collection of strings.

I want to created another variable say x based on some condition like "if characters ('ABC,abc,aBc,)' found in variable y then set x="ABC_found" else "ABC_not found"

1 ACCEPTED SOLUTION

Accepted Solutions
RW9
Diamond | Level 26 RW9
Diamond | Level 26

You haven't stated a question?  Perhaps you want something like:

     x=findw(upcase(YOUR_VARIABLE),"ABC");

X will then contain the first starting postion of ABC in the text.

View solution in original post

8 REPLIES 8
RW9
Diamond | Level 26 RW9
Diamond | Level 26

You haven't stated a question?  Perhaps you want something like:

     x=findw(upcase(YOUR_VARIABLE),"ABC");

X will then contain the first starting postion of ABC in the text.

munitech4u
Quartz | Level 8

What if i wanted to check, like if 2 chars match ("ABC" or "CDE")

RW9
Diamond | Level 26 RW9
Diamond | Level 26

Well, that's a very different requirement than your previous request.  There is the soundex function.  Maybe able to do it with reg expressions also.  The way I would do it though is to first decide on how many need to match.  Then treat the string as an array and loop over it (I assume 2 chars need to match):

data want;

     set have;

     result=0;

     do i=1 to length(strip(the_string));

          if substr(the_string,i,1) in ("C","D","E") then result=result+1;

     end;

run;

Then if result>=2 you know that at least 2 characters match irrespective of position.  

munitech4u
Quartz | Level 8

I cannot use substr function, as the character can occur at any position.

RW9
Diamond | Level 26 RW9
Diamond | Level 26

That is what the loop is for. 

Iteration 1 = Is character at position 1 in the list of required characters, if so add 1 to total

Iteration 2 = is character at position 2 in the list of required characters, if so add 1 to total

Continue until end of string.

If total >= 2 - i.e if more than two required characters are found in the string any position, then there is a match.

munitech4u
Quartz | Level 8

For some reason, result is always 0 coming for me. Is there anything we need to add for repeating over the number of rows?

RW9
Diamond | Level 26 RW9
Diamond | Level 26

Start a new topic.  Post some test data, and what you want the output to look like.

munitech4u
Quartz | Level 8

Nevermind here is what worked for me: I used the FIND with if condition and set the new variable to 1 if its found and repeated same in else for next keyword and so on.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 8 replies
  • 926 views
  • 0 likes
  • 2 in conversation