Solved
Contributor
Posts: 33

# Macro

Hello,

I have a question about the macros.
Indeed in this simple example, I want to create a multitude of graphics.
Problem is that I have to write each time  %er   (     ,   ).

How to write that once  % er?  But that all graphics are produced.

With% let?  %let p= a e r t y;  ?

Data toto;
input a z e r t y;
cards;
1 2 3 4 5 77
6 45 4 8 7 99
4 5 6 8 7 22
1 2 5 4 7 88
;
run;

%macro er (x,y);
proc sgplot data=toto;
scatter x=&x. y=&y./ datalabel;
run;
%mend;
%er (a,z);
%er (a,e);
%er (a,r);
%er (a,t);
%er (a,y);
%er (z,a);
%er (z,e);
%er (z,r);
%er (z,t);
%er (z,y);
%er (e,a);
%er (e,z);
%er (e,r);
%er (e,t);
%er (e,y);

...

.........It is too long  :/

Accepted Solutions
Solution
‎04-30-2018 05:55 AM
Super User
Posts: 9,599

## Re: Macro

[ Edited ]

Well first off, you would be better off modelling your toto dataset in such a way that you don't have to do this, i.e. just two columns x and y.

But you can do something like:

`Data toto;input a z e r t y;cards;1 2 3 4 5 776 45 4 8 7 994 5 6 8 7 221 2 5 4 7 88;run;%macro er (x,y); %put x=&x. y=&y.;%mend;data _null_;  array tmp {*} a z e r t y; do i=1 to 6;   do j= i+1 to 6;     call execute(cats('%er (x=',vname(tmp{i}),',y=',vname(tmp{j}),');'));   end; end;run;`

All Replies
Solution
‎04-30-2018 05:55 AM
Super User
Posts: 9,599

## Re: Macro

[ Edited ]

Well first off, you would be better off modelling your toto dataset in such a way that you don't have to do this, i.e. just two columns x and y.

But you can do something like:

`Data toto;input a z e r t y;cards;1 2 3 4 5 776 45 4 8 7 994 5 6 8 7 221 2 5 4 7 88;run;%macro er (x,y); %put x=&x. y=&y.;%mend;data _null_;  array tmp {*} a z e r t y; do i=1 to 6;   do j= i+1 to 6;     call execute(cats('%er (x=',vname(tmp{i}),',y=',vname(tmp{j}),');'));   end; end;run;`
☑ This topic is solved.