turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- SAS Programming
- /
- SAS Procedures
- /
- Effective way to check if a macro variable takes v...

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

03-04-2015 01:52 PM

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

Accepted Solutions

Solution

03-04-2015
02:26 PM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Sunny_Sun

03-04-2015 02:26 PM

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Sunny_Sun

03-04-2015 02:26 PM

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.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Astounding

03-04-2015 02:51 PM

many thanks it works.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Sunny_Sun

03-04-2015 02:36 PM

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;

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

Posted in reply to billfish

03-04-2015 02:52 PM

many thanks for your help