*
;
options nosource;
%macro remarks (data,result,x,y,text,style,size,position);
options nostimer nonotes nomprint nosymbolgen;
*written: June 26, 1995, Arnold Schick University of Marburg;
%if &data = and &result = and &x = and &y = or
%upcase(&data) = HELP or &data = ? %then %do;
%put This macro creates annotate data set;
%put for annotation of text within graphs;
%put and prepares axes-statements: horizontal: axis1, vertical: axis2;
%put;
%put call: remarks (data,result,x,y,text,font,fontsize,position);
%put;
%put with meanings and defaults: ;
%put data : input data set [ _last_ ];
%put result : output data set [ _anno_ ];
%put x : variablename for abscissa in input data set [ x ];
%put y : variablename for ordinate in input data set [ y ];
%put text : variablename of textvariable [ text ] in data set;
%put font : variablename of font [ style ] or fontname [ simplex ];
%put fontsize : variablename of fontsize [ size ] or fontsize [ 1 ];
%put position : variablename of position [ position ] or position [ 2 ] = center;
%put Please note, text should be defined in format $char30;
%put ;
%goto fin;
%end;
%if &data =. %then %let data = _LAST_ ;
%if &data = %then %goto quit_1;
%if &result = or &result = . %then %let result = _ANNO_ ;
%if &x = or &x = . %then %let x = x;
%if &y = or &y = . %then %let y = y;
%if &text = or &text=. %then %let text =text;
%if &style = or &style=. %then %let style=simplex;
%if &size = %then %let size= . ;
%if &position = or &position =. %then %let position=2;
data &result;
set &data;
retain function 'LABEL' xsys '2' ysys '2' style "&style"
size &size position "&position" text ' ';
keep function x y xsys ysys style size position text;
x = &x;
y = &y;
text = &text;
run;
proc means data=&data;
var &x &y;
output out=_minmax_ min=min_x min_y max=max_x max_y;
run;
%let prop = %scan(&size,1,1234567890);
%if &prop ^=. %then %do;
data _NULL_;
set _MINMAX_;
dx = (max_x-min_x)*0.1;
dy = (max_y-min_y)*0.1;
call symput('min_x',min_x-dx*&size); call symput('min_y',min_y-dy*&size);
call symput('max_x',max_x+dx*&size); call symput('max_y',max_y+dy*&size);
call symput('dx',dx); call symput('dy',dy);
run;
%end; %else %do;
data _NULL_;
set _MINMAX_;
dx = (max_x-min_x)*0.1;
dy = (max_y-min_y)*0.1;
call symput('min_x',min_x-dx); call symput('min_y',min_y-dy);
call symput('max_x',max_x+dx); call symput('max_y',max_y+dy);
call symput('dx',dx); call symput('dy',dy);
run;
%end;
proc datasets nolist;
delete _MINMAX_;
quit;
axis1 order=&min_x to &max_x by &dx;
axis2 order=&min_y to &max_y by &dy;
%goto fin;
%quit_1 : MACRO-HALT: %put input data set name is not present;
%fin : ;
options source stimer ;
%mend remarks; options source;
/*
*Example;
data one;
input x y size position $1. style $8. text $char30.;
*drop size position style;
cards;
1 1 1.1 3 zapf Text 1
2 2 0.6 2 simplex noch ein Text
3 2 1.2 4 zapfb ein weiterer Text
3 3 2 7 brush last text
;
run;
%remarks(one,remarks);
proc gplot data=one;
symbol i=none v=star r=123;
plot y*x / annotate=remarks
haxis=axis1 vaxis=axis2
nolegend noaxis;
run; quit;
*/
%remarks;
*;