BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
bncoxuk
Obsidian | Level 7

SAS said there is syntax error for &j:

%MACRO calnum;
  %DO j=1 %TO 2;
  %DO i=1 %TO 10;
     PROC UNIVARIATE DATA=work.data&j;
       VAR diff;
       OUTPUT OUT=work.pctile&j%SYSFUNC(PUTN(&i,z2.)) PCTLPRE=P&j_ PCTLPTS=1 to 100 BY 1;
     RUN;
  %END;
  %END;
%MEND;

It seemed that the use of work.data&j is fine, but it is error to specify it as: PCTLPRE=P&j_  

How can I put this right?

1 ACCEPTED SOLUTION

Accepted Solutions
Linlin
Lapis Lazuli | Level 10

please change 

PCTLPRE=P&j_ PCTLPTS=1 to 100 BY 1; to

PCTLPRE=P&j._ PCTLPTS=1 to 100 BY 1;

View solution in original post

2 REPLIES 2
Linlin
Lapis Lazuli | Level 10

please change 

PCTLPRE=P&j_ PCTLPTS=1 to 100 BY 1; to

PCTLPRE=P&j._ PCTLPTS=1 to 100 BY 1;

Tom
Super User Tom
Super User

LinLin's answer should solve the problem.  SAS will interpret &J_ as a request to expand the non existent macro variable named J_.  Placing the period after the J will let SAS know that you want to expand the value of the macro variable J instead.

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

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
  • 2 replies
  • 1123 views
  • 3 likes
  • 3 in conversation