Date: Fri, 27 Feb 2004 13:57:39 -0500
Reply-To: "Fehd, Ronald J. (PHPPO)" <rjf2@CDC.GOV>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Fehd, Ronald J. (PHPPO)" <rjf2@CDC.GOV>
Subject: Re: pound sign causes macro problems in Version 9.1
Content-Type: text/plain; charset="us-ascii"
> From: Dale McLerran [mailto:stringplayer_2@YAHOO.COM]
> %macro testit(testparm = );
to which I responded:
> Your ByGuessAndByGolly goes down in flames:
> ERROR: A bug in SAS has been encountered.
> Please call your SAS representative and report the following message:
> YJEVAL: Invalid comparison operator 13 encountered.
> ERROR: %EVAL function has no expression to evaluate, or %IF statement
has no condition.
> ERROR: The macro TESTIT will stop executing.
> I have opened a TechSupport call on this.
From: SAS Technical Support [mailto:support@sas.com]
Sent: Friday, February 27, 2004 1:45 PM
OS: win2000pro Product: base
OS Release: Topic: macro
Product Rel: 9.1 (TS1M0) Subtopic:
TSLevel:
Thanks for sending in this example. The error is due to the # present
in "#SOMESPECIALVALUE#". Starting in version 9.1, # is now a special
character indicating the new IN operator. I am aware of the the
problems that this is now causing and have reported this to the macro
developer. If an option becomes available to turn off the meaning of
this character, I will send you an email. Currently the circumvention
to this problem is to use a quoting function.
%macro testit(testparm = );
%*if %upcase(&testparm) = #SOMESPECIALVALUE# ;
%*if %upcase(%superq(testparm)) = #SOMESPECIALVALUE#
%then %put @@That is the one.;
%if %sysevalf(%upcase(testparm) = %quote(#SOMESPECIALVALUE#))
%then %put @@That is the one.;
%else %put @@That is not it.;
%mend testit;
%testit(testparm = xyz);
Regards,
A Little Birdie
SAS Tech Support