In reply to Jack.

Hi Jack,
Yes, one way of implementing this timer is to copy & paste these two code snippets in the beginning and in the end of each macro. In this case you can modify your second snippet to include message on the macro name duration of which you are reporting. You can modify the second snippet to look like this:
data _null_;
dur = datetime() - &_timer_start;
put 30*'-' / "MACRO &SYSMACRONAME HAS ENDED." / ' TOTAL DURATION:' dur time13.2 / 30*'-';
run;

When using with a macro, I also suggest declaring _timer_start macro variable as local:
%local _timer_start;
%let _timer_start = %sysfunc(datetime());

so it would not interfere with the same-named macro variable in the calling program.

Another way of implementing this macro is to place the 2 code snippets before and after the macro call.

If you come up with a simpler method I would like to hear from you.