获取ODS输出表名称而不必实际运行PROC?

时间:2013-12-27 16:11:48

标签: sas

问题:有没有办法从PROC获取ODS表名而不使用ods trace on运行程序到那一点?

背景:我经常需要从PROC输出ODS数据集,但我知道获取可用数据集列表的唯一方法是插入

ods trace on;

在PROC之前

,然后运行程序,然后查看日志文件以查找相应的数据集名称,然后插入我的ods output语句,然后重新运行。

在一个耗时的程序中,该过程可能需要花费大量时间,并且为了弄清楚如何继续编程而必须运行程序似乎效率低下。

我找不到任何可以通过PROC列出可用ODS表的SAS文档,但是如果存在类似的东西,那么这将是这个问题的一个很好的答案。我知道ODS输出表根据指定的选项而有所不同,但似乎仍然可以编译一个综合列表,并附有关于每个表是否依赖于PROC特定选项的注释。

如果有类似meta-PROC的东西可以指定PROC名称,并且返回ODS表名而不运行任何其他代码,我也会喜欢它。

2 个答案:

答案 0 :(得分:2)

SAS文档中有一个汇编。这是9.4,但在所有版本中都有一个。

http://support.sas.com/documentation/cdl/en/odsug/66611/HTML/default/viewer.htm#p0mnbijm0t6w1cn1dpf3q5suxk4u.htm

答案 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.TmplbaseBase.Freq。以define table ...开头的每个PROC FREQ条目都是一个单独的ODS表; PROC FREQ的主要版本是OnewayfreqsCrosstabFreqs,但通常所有与图标类似的图标都是表格(蓝色图表是动态变量)。

对于PROC REG,例如,它位于SASHELP.tmplstat文件夹(SASHELP.tmplstat.Reg)中,并且有几十个表可供查看,通常具有逻辑名称。并非每个表都是从每次运行中生成的(这取决于您的要求以及PROC决定需要什么),而且我不确定每个表都可以通过ODS拦截,但大多数都是。