The only time you'd ever want to do this is if you have global variables that will appear throughout the program. For example, it is not uncommon to have special setup or initialization programs to hold commonly-referred values, especially when going between development and production. This can make things easier to handle when promoting a program, or easier to adjust if certain things change later on (such as a directory location or hostname).
For example, the below macro can change some global macro variables to point to certain directories that differ between two servers depending on where the code is run.
%macro dev_prod;
%global directory inlib outlib;
%if(&syshostname. = production-server.company.com) %then %do;
%let directory = C:\prodlocation;
%let inlib = C:\prodlib;
%let outlib = C:\outlib;
%end;
%else %if(&syshostname. = dev-server.company.com) %then %do;
%let directory = C:\devlocation;
%let inlib = C:\devlib;
%let outlib = C:\outlib;
%end;
%mend;
%dev_prod;
In general, you want to use local macro variables in macros that perform specific functions. For example, the below macro regresses on variables on a dataset:
%macro regression(data=, dep=, indep=);
proc reg data=&data.;
model &dep. = &indep.;
run;
%mend;
%regression(data=sashelp.cars, dep=horsepower, indep=msrp);