BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
randomman
Fluorite | Level 6

data a;
input name $ age height weight;
datalines;
don 28 168 76
;run;
%macro cols1; name age; %mend;
%macro cols2; height weight; %mend;
proc print data = a; var %cols2 %cols1; run;

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star
Calling %cols2 generates all the text within the macro:

height weight;

Extrapolating upon this, your full VAR statement generates:

var height weight; name age;

Clearly, there's an extra semicolon. A good solution would be to remove the generated semicolons from the macro definition. Have %cols2 generate only:

height weight

Then add a semicolon for the VAR statement when calling the macros:

var %cols2 %cols1 ;

View solution in original post

2 REPLIES 2
Astounding
PROC Star
Calling %cols2 generates all the text within the macro:

height weight;

Extrapolating upon this, your full VAR statement generates:

var height weight; name age;

Clearly, there's an extra semicolon. A good solution would be to remove the generated semicolons from the macro definition. Have %cols2 generate only:

height weight

Then add a semicolon for the VAR statement when calling the macros:

var %cols2 %cols1 ;
Patrick
Opal | Level 21

Remove the semicolons and your code will work.

Patrick_0-1692585470737.png

 

You normally only use macros for dynamic code generation. 

For your case you'd rather use macro variables as in below sample code.

%let cols1=name age;
%let cols2=height weight;

proc print data = a;
  var &cols2 &cols1;
run;

 A macro definition for your sample could look like:

%macro doit(cols1,cols2);
  proc print data = a;
    var &cols2 &cols1;
  run;
%mend;

%doit(name age, height weight);

And as an advice: Don't dive too early into SAS macro coding. First get "solid" with SAS data step and SAS Proc's. 

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