Solved
Contributor
Posts: 33

Effective way to check if a macro variable takes values among several values

Hi,

I am trying to create a macro variable M that takes 1 if macro variable X takes values among a set of values defined by another macro variable Y.

For example, %LET X=a;  %LET Y=a b c d e f g;

Since a is one of values of Y, so macro variable M takes 1; otherwise, it takes 0.

Can you please show me some quick way to write it? In STATA, it is something like

Local M: list X in Y

Sunny

Accepted Solutions
Solution
‎03-04-2015 02:26 PM
Super User
Posts: 6,760

Re: Effective way to check if a macro variable takes values among several values

Posted in reply to Sunny_Sun

This should be easy enough:

%if %index(%str( &y ), %str( &x )) %then %let m=1;

%else %let m=0;

It's important to keep the blanks inside the parentheses, before and after &x and &y.

Good luck.

All Replies
Solution
‎03-04-2015 02:26 PM
Super User
Posts: 6,760

Re: Effective way to check if a macro variable takes values among several values

Posted in reply to Sunny_Sun

This should be easy enough:

%if %index(%str( &y ), %str( &x )) %then %let m=1;

%else %let m=0;

It's important to keep the blanks inside the parentheses, before and after &x and &y.

Good luck.

Contributor
Posts: 33

Re: Effective way to check if a macro variable takes values among several values

Posted in reply to Astounding

many thanks it works.

Contributor
Posts: 52

Re: Effective way to check if a macro variable takes values among several values

Posted in reply to Sunny_Sun

You give the following a try:

%LET X=d;

%LET Y=a b c d e f g;

%let M = %sysfunc(sign(%index(&y,&x)));

%put the value of M is >>> &M;

Contributor
Posts: 33

Re: Effective way to check if a macro variable takes values among several values

many thanks for your help

🔒 This topic is solved and locked.

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

Discussion stats
• 4 replies
• 242 views
• 3 likes
• 3 in conversation