SAS中用ODS指定统计过程的输出数据集
2012-09-13 22:23阅读:
来自SESUG 2007: ODS An Introduction to Creating Output Dataset.
如何知道一个一个过程的输出对象有哪些?可以用ods trace:
ods trace on;
下面的例子通过ods trace查看means过程具有哪些输出对象。这些输出对象的信息在log窗口中显示。
data a(keep=var);
do i=1 to 100;
var=i+int(100*rannorm(0));
output;
end;
run;
ods trace on;
proc means data=a;
var var;
run;
ods trace off;
在log窗口中显示了means过程的输出对象:
Output Added:
-------------
Name: Summary
Label: Summary
statistics
Template: base.summary
Path:
Means.Summary
-------------
可以知道means过程提供了一个输出对象,名称为Summary,标签为Summary
Statistics。同时,在输出窗口中点开Means:The SAS System,显示具有一个输出对象Summary
Statistics,里面包含数量,均值,标准差,最大最小值的信息。
由于means过程只有一个输出对象,所以可以很确定地知道统计量肯
定都在该输出对象中。如果在比较复杂的过程中,输出对象可能不止一个。当使用者需要明确知道输出对象名称,从而可以将特定输出对象指定输出到特定数据集时,使用者可能并不能确定自己感兴趣的统计量在哪个输出对象中,该对象的名称是什么。这个时候ods
trace的作用就会表现出来。看下面的例子:
data a(keep=y x1 x2);
do i=1 to 100;
y=i+int(100*rannorm(0));
x1=.6*y+ranuni(0)-0.5;
x2=.4*y+ranuni(0)-0.5;
output;
end;
run;
ods trace on;
proc reg data=a;
model y=x1 x2;
run;
ods trace off;
在log窗口中将显示一下输出对象被添加:
Output Added:
-------------
Name:
NObs
Label:
Number of
Observations
Template:
Stat.Reg.NObs
Path:
Reg.MODEL1.Fit.y.NObs
-------------
Output Added:
-------------
Name:
ANOVA
Label:
Analysis of
Variance
Template:
Stat.REG.ANOVA
Path:
Reg.MODEL1.Fit.y.ANOVA
-------------
Output Added:
-------------
Name:
FitStatistics
Label:
Fit Statistics
Template:
Stat.REG.FitStatistics
Path:
Reg.MODEL1.Fit.y.FitStatistics
-------------
Output Added:
-------------
Name:
ParameterEstimates
Label:
Parameter
Estimates
Template:
Stat.REG.ParameterEstimates
Path:
Reg.MODEL1.Fit.y.ParameterEstimates
-------------
Output Added:
-------------
Name:
DiagnosticsPanel
Label:
Fit
Diagnostics
Template:
Stat.REG.Graphics.DiagnosticsPanel
Path:
Reg.MODEL1.ObswiseStats.y.DiagnosticPlots.DiagnosticsPanel
-------------
Output Added:
-------------
Name:
ResidualPlot
Label:
Panel 1
Template:
Stat.REG.Graphics.ResidualPanel
Path:
Reg.MODEL1.ObswiseStats.y.ResidualPlots.ResidualPlot
-------------
注意其中DiagnosticPanal和ResidualPlot是诊断图形。
如果通过log和results窗口交替查看比较繁琐的话,可以使用listing选项,将输出对象信息和输出对象内容全部在results窗口中显示:
ods trace on/listing;
(注意:SAS V9.3 默认输出为html格式,可能没有输出对象的信息)。
在知晓了输出对象名称之后,可以使用ods output 输出对象名称=输出数据集
的办法将制定输出对象中的统计量输出到指定的输出数据集。
ods output ParameterEstimates=estim;
proc reg data=a;
model y=x1 x2;
model y=x2;
run;
quit;
ods output close;
(注意,如果忘记在reg过程结尾加quit语句,那么输出数据集将不会产生,并且log中出现警告信息,表示输出对象的名称或路径没有设定正确)。
输出对象estim的内容为:

另外,在ods output中,输出对象名称ParameterEstimates可以用输出对象路径代替:
ods output Reg.MODEL1.Fit.y.ParameterEstimates=estim;
一个进一步的想法是,能不能将图形输出对象(比如ResidualPlot)以指定格式输出到指定位置?