如何将PROC FREQ交叉表的PROC TEMPLATE重置为默认设置?
解决PROC TEMPLATE修改PROC FREQ交叉表默认模板的问题
问题原因
你执行的proc template代码未指定模板存储位置,默认将自定义模板保存到了SASUSER.TEMPLAT库(ODS路径中该库处于UPDATE模式,优先级高于SASHELP的默认模板库),因此每次启动SAS都会优先加载这个自定义模板,导致所有PROC FREQ交叉表都采用自定义格式。PROC TEMPLATE默认是永久修改,并非临时生效。
解决方法
方法1:彻底删除自定义模板,恢复默认设置
执行以下代码删除SASUSER库中存储的自定义Base.Freq.CrossTabFreqs模板,之后PROC FREQ会自动调用SASHELP中的默认模板:
proc template; delete Base.Freq.CrossTabFreqs; run;
方法2:临时调整ODS路径优先级(保留自定义模板,按需切换)
如果需要保留自定义模板,只是临时使用默认格式,可调整ODS路径顺序,让SASHELP的默认模板库优先级更高:
ods path sashelp.tmplmst(read) sasuser.templat(update);
若需要再次使用自定义模板,再改回原路径顺序即可:
ods path sasuser.templat(update) sashelp.tmplmst(read);
方法3:将自定义模板存储到临时库(避免永久影响默认设置)
如果以后需要临时使用自定义模板,建议将模板保存到WORK临时库(SAS关闭后自动清空,不会长期影响默认配置):
-- 创建并存储临时模板 proc template; define crosstabs Base.Freq.CrossTabFreqs; cell_style={foreground=color. fontweight=bold background=light grey}; end; store Base.Freq.CrossTabFreqs / out=work.templat; run; -- 使用时加载临时模板 ods path work.templat(read) sashelp.tmplmst(read); -- 用完后恢复默认路径 ods path sasuser.templat(update) sashelp.tmplmst(read);
内容的提问来源于stack exchange,提问作者Lma
相关产品推荐
相关产品推荐

