execute same macro on different colors

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 14
Accepted Solution

execute same macro on different colors

[ Edited ]

Hi there,

 

I wonder if I can use %do_over or any other loop function to write the following code?

by the way, the values in () are options following "pattern=" in proc sgplot

%drawplot(dot);
%drawplot(solid);
%drawplot(dash);
%drawplot(longdash);

 

Thanks!

 


Accepted Solutions
Solution
‎03-09-2017 09:22 PM
Valued Guide
Posts: 505

Re: execute same macro on different colors

Below is a 'do_over' implementation
and a dosubl implementation.

I am not a fan of 'call execute'.
Hopefully SAS will someday alloe
'%do' and '%if' in open code;

*    _
  __| | ___     _____   _____ _ __
 / _` |/ _ \   / _ \ \ / / _ \ '__|
| (_| | (_) | | (_) \ V /  __/ |
 \__,_|\___/___\___/ \_/ \___|_|
          |_____|
;


%macro drawplot(syms);
  %put ****  &=syms  *******;
%mend drawplot;

%array(sym,values=dot solid dash longdash);
%DO_OVER(sym,macro=drawplot);

****  SYMS=dot  *******
****  SYMS=solid  *******
****  SYMS=dash  *******
****  SYMS=longdash  *******

*    _                 _     _
  __| | ___  ___ _   _| |__ | |
 / _` |/ _ \/ __| | | | '_ \| |
| (_| | (_) \__ \ |_| | |_) | |
 \__,_|\___/|___/\__,_|_.__/|_|

;

data _null_;
  do sym="dot", "solid",  "dash", "longdash";
     call symputx('syms',sym);
     rc=dosubl('
        %drawplot(&syms);
     ');
  end;
run;quit;


****  SYMS=dot  *******
****  SYMS=solid  *******
****  SYMS=dash  *******
****  SYMS=longdash  *******



SOAPBOX ON
I favor this because, the more of us that use it,
the more likely SAS will not deprecate it.
It has enomous potential(like the somewhat deprecated libname engineS), and unlike the
trivial implementation of 'call exceute', it
requires very skilled SAS developers to bring
it to it's full potential.

It is also a language differentiator(ie it
will put WPS and others on their toes.)

SOAPBOX OFF


View solution in original post


All Replies
Super User
Posts: 19,877

Re: execute same macro on different colors

Posted in reply to joseph626

Yes...look at CALL EXECUTE or DOSUBL 

Solution
‎03-09-2017 09:22 PM
Valued Guide
Posts: 505

Re: execute same macro on different colors

Below is a 'do_over' implementation
and a dosubl implementation.

I am not a fan of 'call execute'.
Hopefully SAS will someday alloe
'%do' and '%if' in open code;

*    _
  __| | ___     _____   _____ _ __
 / _` |/ _ \   / _ \ \ / / _ \ '__|
| (_| | (_) | | (_) \ V /  __/ |
 \__,_|\___/___\___/ \_/ \___|_|
          |_____|
;


%macro drawplot(syms);
  %put ****  &=syms  *******;
%mend drawplot;

%array(sym,values=dot solid dash longdash);
%DO_OVER(sym,macro=drawplot);

****  SYMS=dot  *******
****  SYMS=solid  *******
****  SYMS=dash  *******
****  SYMS=longdash  *******

*    _                 _     _
  __| | ___  ___ _   _| |__ | |
 / _` |/ _ \/ __| | | | '_ \| |
| (_| | (_) \__ \ |_| | |_) | |
 \__,_|\___/|___/\__,_|_.__/|_|

;

data _null_;
  do sym="dot", "solid",  "dash", "longdash";
     call symputx('syms',sym);
     rc=dosubl('
        %drawplot(&syms);
     ');
  end;
run;quit;


****  SYMS=dot  *******
****  SYMS=solid  *******
****  SYMS=dash  *******
****  SYMS=longdash  *******



SOAPBOX ON
I favor this because, the more of us that use it,
the more likely SAS will not deprecate it.
It has enomous potential(like the somewhat deprecated libname engineS), and unlike the
trivial implementation of 'call exceute', it
requires very skilled SAS developers to bring
it to it's full potential.

It is also a language differentiator(ie it
will put WPS and others on their toes.)

SOAPBOX OFF


☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 122 views
  • 2 likes
  • 3 in conversation