BookmarkSubscribeRSS Feed
Ron_MacroMaven
Lapis Lazuli | Level 10

reddyr1 wrote:

\begin{question}

%macro eye (eye,dat, id);

data adae ;

  set adamdata.adae;

  where &cond1;

    run;

%mend eye;

The where condition(in red color) needs to be modified for each table.

Eg: where ethnicity="Hispanic"

\end{question}

your problem is that you want to pass a string with an equals sign in it

as a parameter.

change from special character (=) to mnemonic (eq)

%macro eye (eye=,dat=, id=,cond1=);

%put &=cond1;

* ... where &cond1;

run;

%mend;

%eye(eye=,dat=,id=

,cond1=ethnicity eq 'Hispanic');

3 REPLIES 3
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10

Look at using the %quote(....) macro function to enclose your data-passed WHERE logic.

> suggested SAS.COM reference search argument:  pass quotes macro invocation site:sas.com

Scott Barry

SBBWorks, Inc.

Reeza
Super User

Yes, I asked a similar question a few weeks ago and it seems to work fine. I didn't have to mask anything.

https://listserv.uga.edu/cgi-bin/wa?A2=ind1506a&L=SAS-L&P=91498

Tom
Super User Tom
Super User

There is no need to change the parameter DEFINITIONS from positional to named, you can call position parameters by name.

%eye(eye=varx='blue')

You can also add () which should not impact the where clause.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

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
  • 1431 views
  • 1 like
  • 4 in conversation