I've got into error conditions when calling a macro without parameters not using a semicolon.
%macro test;
<some code>
%mend;
%test
This is why I always define and call macros like below even if they don't have a parameter.
%macro test();
<some code>
%mend;
%test()
I personally prefer to end macros with a semicolon even though it's not necessary - except if it's a function style macro used in the middle of some expression where a semicolon of course would terminate the SAS expression in the wrong place. ...but then I avoid such function style macros as far as I can.
Can't think of any other case where this unnecessary semicolon would create issues.