欢迎关注,SAS茶谈!
这个问题,在SAS编程-Efficacy:如何生成样本率的可信区间?第4节有过描述,这里另开一篇文章进行说明,方便以后文章进行引用。
过程步运行结果输出到数据集,通常有两种做法。第一,在过程步中,使用Output
语句;第二,使用ods output
语句进行输出。两者输出结果的展现形式,略有不同。
需要注意的是,并非所有过程步都有output
语句。如果没有,需要使用ods output
语句进行输出。
0. 举例程序
以FREQ过程步输出样本率可信区间为例,正常实现的代码为:
***Get raw data;
data tmp;
do i = 1 to 13;
aval = 0;
output;
end;
do i = 1 to 131;
aval = 1;
output;
end;
drop i;
run;
***Count frequency;
proc format;
value aval
0 = 0
1 = 1
;
run;
proc means data = tmp nway completetypes;
format aval aval.;
class aval / preloadfmt order = data;
var aval;
output n = count out = count(drop = _:);
run;
**Get exact 95% CI for the proportion of positive;
proc freq data = count;
tables aval/ binomial(cl = exact level = "0");
weight count / zeros;
run;
Results中的红框中的内容需要获取的可信区间的上下限。
下面以提到的2种方法进行演示。
1. Output
语句
FREQ过程步中,本身就有output
语句。为了输出tables
语句中的binomial
选项的结果,output
语句中,也需要添加选项binomial
。具体语法参考SAS Help Center: OUTPUT Statement。
proc freq data = count;
tables aval/ binomial(cl = exact level = "0");
weight count / zeros;
output out = cl binomial;
run;
输出的数据集的如下:
数据集中红色方框里的两个变量,就是对应可信区间的上下限。输出数据集中每个变量的Label都会描述变量的含义,很容易辨识。
与Results内容相比,Ouput语句输出的数值没有Format,以原始数据的形式进行展示。不过,这不影响数值的使用。
4.2 ods output
语句
SAS过程步输出到Results中的内容,都是有具体的名称,可以通过ods output
将具体名称对应的内容输出到数据集。
这种方法,首先要查看Results输出内容对应的具体名称,通常也有2种方式。
第一,从SAS官方文档中查询。例如,FREQ过程步中,Details栏中有ODS Table Names的汇总。对应的binomial
选项输出内容名称如下(来源:SAS Help Center: ODS Table Names)
其他过程步也在类似的位置,文档中会有特定选项输出结果对应的名称。
SAS文档搜索入口如下:SAS Documentation | SAS Support,可以直接搜索想要过程步的信息。
第二,也可以用ods trance on;
进行查询输出内容的名称。
ods trace on ;
proc freq data = count;
tables aval/ binomial(cl = exact level = "0");
weight count / zeros;
run;
ods trace off;
以上程序运行之后,Results中输出内容的名称就会输出到Log中:
知晓内容名称后,就可以使用ods output
语句将对应内容输出到数据集:
*ods trace on ;
ods output BinomialCLs = cl;
proc freq data = count;
tables aval/ binomial(cl = exact level = "0");
weight count / zeros;
run;
ods output close;
*ods trace off;
运行结果如下,上下限的数值以6.4
的Format进行展示,与Results中显示一致。
输出到数据集之后,具体如何处理成Table中的显示,这里就不过多讲了。
总结
文章介绍了,将过程步结果输出到数据集的2种方法,这个操作在处理Efficacy内容时会多次用到。关于具体使用哪种方法输出到数据集,每个人可能有自己的编程习惯, 看个人喜好。
感谢阅读, 欢迎关注:SAS茶谈!
若有疑问,欢迎评论交流