问题:有没有办法从PROC获取ODS表名而不使用ods trace on
运行程序到那一点?
背景:我经常需要从PROC输出ODS数据集,但我知道获取可用数据集列表的唯一方法是插入
ods trace on;
,然后运行程序,然后查看日志文件以查找相应的数据集名称,然后插入我的ods output
语句,然后重新运行。
在一个耗时的程序中,该过程可能需要花费大量时间,并且为了弄清楚如何继续编程而必须运行程序似乎效率低下。
我找不到任何可以通过PROC列出可用ODS表的SAS文档,但是如果存在类似的东西,那么这将是这个问题的一个很好的答案。我知道ODS输出表根据指定的选项而有所不同,但似乎仍然可以编译一个综合列表,并附有关于每个表是否依赖于PROC特定选项的注释。
如果有类似meta-PROC的东西可以指定PROC名称,并且返回ODS表名而不运行任何其他代码,我也会喜欢它。
答案 0 :(得分:2)
SAS文档中有一个汇编。这是9.4,但在所有版本中都有一个。
答案 1 :(得分:1)
如果输出过程能够以零观察值运行,则可以使用options obs=1;
(稍后重置为obs=max
)运行它(通常,如果您没有执行任何编程代码生成,这可能就是这种情况)。您还可以创建一个不使用实际数据的测试程序运行(尽管这取决于您正在做什么)。 (您不能使用obs=0
,因为这不会产生任何输出。)
例如:
options obs=1;
ods trace on;
proc freq data=sashelp.class;
run;
ods trace off;
options obs=max;
如果是使用模板的过程,您也可以从已安装的模板中确定名称。例如,PROC FREQ可以。
打开Results explorer,右键单击顶部的“Results”节点。选择“模板”。这将打开模板资源管理器。然后看看你的程序。大多数统计程序都在Sashelp.Tmplstat
。但是,FREQ
不是;它位于Sashelp.Tmplbase
下Base.Freq
。以define table ...
开头的每个PROC FREQ条目都是一个单独的ODS表; PROC FREQ的主要版本是Onewayfreqs
和CrosstabFreqs
,但通常所有与图标类似的图标都是表格(蓝色图表是动态变量)。
对于PROC REG
,例如,它位于SASHELP.tmplstat文件夹(SASHELP.tmplstat.Reg)中,并且有几十个表可供查看,通常具有逻辑名称。并非每个表都是从每次运行中生成的(这取决于您的要求以及PROC决定需要什么),而且我不确定每个表都可以通过ODS拦截,但大多数都是。