Great post as always. Just to add a 5th way, the INSET statement in SGPANEL allows you to use dataset variables without needing to create macro variables. So you can do stuff like:

proc sql ;
create table class as
select *
,mean(height) as meanheight
,mean(weight) as meanweight
from sashelp.class
group by sex
;
quit ;

proc sgpanel data=class ;
panelby sex / rows=1 layout=rowlattice;
scatter x=height y=weight;
inset meanheight meanweight;
by sex ;
run ;

Sometimes even if I don't need a paneled plot, I will create a constant variable to use on the panelby statement, so that I can have data-driven INSET values without macro variables. That said, the macro variable approach gives you full control over formats etc.