BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
somebody
Lapis Lazuli | Level 10

I would like to check if a variable value is in a string. if so, return the position or a boolean value. For example, the variable Student takes 1 of the following values: Mary, Mike, Luke.  If the value of this variable is in the list &pass_students then the variable Rank takes the value of the position of that student in the string.

%let pass_student = Mary Daniel Luke Adam Eva;
data WORK.CLASS(label='Student Data');
infile datalines dsd truncover;
input student:$8.;
datalines;
Mary
Peter
Luke
Carol
Henry
;;;;
run;

So far, I tried:

data class; set class;
	temp="&pass_student.";
	rank= find(student,temp,'t');
run;

Which kinda work, but it is case sensitive. How do I fix this? is there a better way to get what I want?

1 ACCEPTED SOLUTION

Accepted Solutions
Patrick
Opal | Level 21

Then your initial code never worked.

I've now changed the this in below code using variable student as 2nd parameter to the function.

data class;
  student='Daniel'; output;
  student='Alfred'; output;
  student='Luke'; output;
  stop;
run;

%let pass_student = Mary Daniel Luke Adam Eva;
data class; 
  set class;
	rank= find("&pass_student.",student,'it');
run;

View solution in original post

3 REPLIES 3
Patrick
Opal | Level 21

The 'i' switch allows for case insensitive searches. Also as you're searching for words I'd be using findw() instead of find().

%let pass_student = Mary Daniel Luke Adam Eva;
data class; 
  set class;
	rank= findw(student,"&pass_student.",'it');
run;
somebody
Lapis Lazuli | Level 10

Hi, this does not work. rank returns 0 for all obs

Patrick
Opal | Level 21

Then your initial code never worked.

I've now changed the this in below code using variable student as 2nd parameter to the function.

data class;
  student='Daniel'; output;
  student='Alfred'; output;
  student='Luke'; output;
  stop;
run;

%let pass_student = Mary Daniel Luke Adam Eva;
data class; 
  set class;
	rank= find("&pass_student.",student,'it');
run;
How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1308 views
  • 0 likes
  • 2 in conversation