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

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

Thanks in advance.

Sunny

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star

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.

View solution in original post

4 REPLIES 4
Astounding
PROC Star

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.

billfish
Quartz | Level 8


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;

Catch up on SAS Innovate 2026

Dive into keynotes, announcements and breakthroughs on demand.

Explore 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.

SAS Training: Just a Click Away

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

Browse our catalog!

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