Help using Base SAS procedures

help on macro

Reply
Occasional Contributor
Posts: 16

help on macro

I am looping symput in a macro with a list of selected variables.

I have no problem run the symput command outside the macro; But when I put it in the macro, it always report error.

%marcro( varlist=,…….)

%let var1   = %qscan(&varlist, i)

………

%do %while(…….);

data _null_; set a1 end=no_more;

call symput( 'MU'||left(_N_), &var1._Mean);

call symput( 'SD'||left(_N_), &var1._stdDev  );

if no_more then call symput('count',_n_);

run;

……………..

%end;

%mend;

Error message like this :

NOTE: Line generated by the macro variable "VAR1".

1      PDT_Vpp_Mean

-----

22

ERROR 22-322: Syntax error, expecting one of the following: !,

!!, &, *, **, +, ',', -, /, <, <=, <>, =, >, ><,

>=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE,

NG, NL, NOTIN, OR, ^=, |, ||, ~=.

253: LINE and COLUMN cannot be determined.

*****************


Please advise me how to solve this problem. Thanks!


Andrew

Respected Advisor
Posts: 3,799

Re: help on macro

Posted in reply to andrew0845

Why do you want to put so much data into macro variables?  Sounds like a bad idea to me.

Show the data in WORK.A1 you may not need any of the macro bit just better data step.

PROC Star
Posts: 1,322

Re: help on macro

Posted in reply to andrew0845

Agree with _null_ , seems like an odd design.

That said, would expect the cause is a problem of macro processor not %unquoting the value of &var1.

Assuming varlist is just a space-delimited list of variable names, you could change %qscan to %scan.

--Q.

Super User
Posts: 5,513

Re: help on macro

Also note that the error is being generated by portions of the code that you did not show us:  the ...... following the DATA step.  Other than that, I agree with the earlier posters.

Good luck.

Super User
Posts: 10,041

Re: help on macro

Posted in reply to andrew0845

Maybe I understand where is the problem .

1) don't use quote version macro function if you could .

%let var1   = %qscan(&varlist, i)

->

%let var1   = %scan(&varlist, i)


2)if you use %qscan() then use %unquote to get rid of mask character around macro variable.

call symput( 'MU'||left(_N_), &var1._Mean);

->

call symput( 'MU'||left(_N_), %unquote(&var1.)_Mean);



Ksharp

Occasional Contributor
Posts: 16

Re: help on macro

Problem was solved by Xia's suggestion!

Thanks for suggestions from others as well!

Andrew

Ask a Question
Discussion stats
  • 5 replies
  • 618 views
  • 0 likes
  • 5 in conversation