BookmarkSubscribeRSS Feed
andrew0845
Calcite | Level 5

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

5 REPLIES 5
data_null__
Jade | Level 19

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.

Quentin
Super User

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.

The Boston Area SAS Users Group is hosting free webinars!
Next webinar will be in January 2025. Until then, check out our archives: https://www.basug.org/videos. And be sure to subscribe to our our email list.
Astounding
PROC Star

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.

Ksharp
Super User

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

andrew0845
Calcite | Level 5

Problem was solved by Xia's suggestion!

Thanks for suggestions from others as well!

Andrew

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register 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
  • 5 replies
  • 1683 views
  • 0 likes
  • 5 in conversation