Sometimes, you can automate the process of template modification. For example, you can automatically add an MVAR and ENTRYFOOTNOTE statement to every graph template, as in the following example:
ods path sashelp.tmplmst(read); proc datasets library=sasuser nolist; delete templat(memtype=itemstor); run; ods path sasuser.templat(update) sashelp.tmplmst(read);
options ls=256; proc template; source / where=(type='Statgraph') file="tpls.sas"; run; options ls=80; data _null_; infile 'tpls.sas' lrecl=256 pad; input line $ 1-256; file 'newtpls.sas'; put line; line = left(lowcase(line)); if line =: 'begingraph' then put 'mvar __date;' / 'entryfootnote halign=left textattrs=GraphValueText __date;'; file log; if index(line, '__date') then put 'ERROR: Name __date already used.' / line; if index(line, 'entryfootnote') then put line; run; proc template; %include 'newtpls.sas' / nosource; run;
These statements write all ODS graph templates to a file, read that file, and write out a new file with an MVAR and ENTRYFOOTNOTE
statement added after every BEGINGRAPH statement. Then these new templates are compiled with PROC TEMPLATE. These steps assume
that no BEGINGRAPH statement is longer than 256 characters. Most graphs do not have footnotes. Those that do will now have
multiple footnotes. You might want to manually combine them or write a more complicated program to handle them. These steps
also assume that the name __date
is not used anywhere. However, the program does check this and also lists all ENTRYFOOTNOTE statements. Be careful to check
the SAS log to ensure that all templates compile without error. Also, before using templates that are automatically modified,
make sure your modifications are reasonable.
You can delete Sasuser.Templat
and hence all modified templates (assuming the default template search path) as follows:
ods path sashelp.tmplmst(read); proc datasets library=sasuser nolist; delete templat(memtype=itemstor); run; ods path sasuser.templat(update) sashelp.tmplmst(read);