*
;

options nosource;
%macro mimaval (data,variable);

  options nonotes;
  %global minvalue maxvalue;

  %let minvalue = . ; %let maxvalue = . ;
  %if &data     =  or &data     = . %then %goto quit_1;
  %if &variable =  or &variable = . %then %goto quit_2;
  %if %sysfunc(exist(&data)) = 0    %then %goto quit_3;

  proc means data=&data noprint min max;
    var &variable;
    output out=_minmax_  min = v_min max = v_max;
  run;

  data _NULL_;
    set _minmax_;
    call symput('minvalue',v_min);
    call symput('maxvalue',v_max);
  run;

  proc datasets nolist;
    delete _minmax_;
  quit;

  %goto final;
    %quit_1 : %put   MACRO-HALT:     No data set specified ;
    %goto final;
    %quit_2 : %put   MACRO-HALT:     No variable specified ;
    %goto final;
    %quit_3 : %put   MACRO-HALT:     Dataset %upcase(&data) does not exist ;
  %final : ;
  %put minimal value of &variable in &data is: &minvalue;
  %put maximal value of &variable in &data is: &maxvalue;
  options notes;

%mend; options source;

%mimaval(maps.germany,x);
%mimaval(maps.germany,y);
%mimaval(maps.us,y);
%mimaval(maps.us,x);
%mimaval(maps.brazil,x);
%mimaval(maps.brazil,y);


*
;