SAS-那些统计过程步的统计量的输出...

2019-10-21 16:22:32 浏览数 (1)

在SAS使用统计相关的过程步输出结果的时候,结果经常会呈现在result中(以网页或者Lst的形式展现),那么你曾经是否纠结过如何将这些统计量的值自动提取出来,或直接输出到数据集中呢...那么今天小编将盘点一下SAS中Ods Output 将统计量输出到数据集中的方式与技巧,如果有不当或错误之处,同时也邀各位前辈纠错...

proc means统计量的输出

描述性统计中最基本的一个过程步,这个过程步可以算的东西也挺多的,常见的参数也很多了(待会看代码注释部分)...那么这个过程步怎么输出结果呢?想必过程步中的output语句大家都知道的...其实还有另外的一种方式,利用ods output 来输出,接下来看看一个代码~

代码语言:javascript复制
Ods Output summary=temp1 ;
proc means data = sashelp.cars range sum var mean nmiss median Skewness Kurtosis  q1  q3 ;
  var cylinders;                
  class make;
  output out=temp2 n = cnt sum = total mean = avg;
run;
ods output close;
/*n 有效数据记录数   q3 第三分位数; nmiss 缺失数据记录   cv变异系数
mean 均值   var方差 std 标准差   css离均差平方和
median 中位数    clm 95%可信区间 qrange 四分位数间距   max 最大值
ql  第一分位数    min 最小值 Skewness峰度  Kurtosis 偏度 */

将统计过程步放在ods output 中包裹起来,将结果通过关键字=要输出的数据集进行输出; 上面会产生2个新的数据集,一个是temp1(通过ods 输出的 summary=temp1),一个是过程步内的output语句输出的temp2。输出的结果就不看了,但是还是要在这儿贴上一张截图,解释一下为啥是summary=,而不是其他什么单词...

通过右键属性,可以看到那个结果输出的名称,看红色标记起来的。。。看了这个还不知道ods output (summary);为什么是summary的朋友,还请继续往下看...

proc univariate输出统计量

proc univariate也是一个能干很多事的过程步...那么还是看一段代码...注释部分是过程步内的一些选项啥的...还是比较全的。。

代码语言:javascript复制
/*************************************
proc univariate输出的统计量:
Moments  矩
BasicMeasures 位置和可变性的基本测度
BasicIntervals 基本置信区间
TestsForLocation 位置检验
TestsForNormality 正态检验
Quantiles  分位数
ExtremeObs  极值观测
Frequencies   频数
**************************************/

Ods Output Moments=Moments 
BasicMeasures=BasicMeasures
BasicIntervals=BasicIntervals
TestsForLocation=TestsForLocation
TestsForNormality=TestsForNormality
Quantiles=Quantiles
ExtremeObs=ExtremeObs
Frequencies=Frequencies
;
proc univariate data=sashelp.class cibasic cipctldf alpha=0.5 normal PLOT FREQ ;              /*配对样本的符号检验*/
var age;
output out=sd pctlpre=P_  pctlpts=50,95 to 100 by 2.5,2 ;
run;
ods output close;
*PLOT 画图 FREQ频数  normal 此选项可用来要求 UNIVARIATE 过程检定分析的变量是否呈现正态分布并且输出其检验结果。
UNIVARIATE 统计值及对应含义
N 非缺失值个数    NMISS缺失值个数     NOBS观察体总数     MEAN平均数    SUM变量值的总和 STD标准差
VAR变异系数(标准误)   SKEWNESS偏度      KURTOSIS峰度   SUMWT所有观察体在WEIGHT变量上的总和
MAX最大值    MIN最小值     RANGE 最大值减去最小值所得的差   Q3 第三个四分位数
MEDIAN中位数   Q1第一个四分位数 QRANGE  Q3减去Q1之差
P1第1 的百分位数    P5第5 的百分位数     P10第10 的百分位数   P90第90 的百分位数
P95第95 的百分位数    P99第99 的百分位数
MODE 众数如果有不只一个众数取最小值的那一个
SIGNRANK 等级符号检定法 (The Signed Rank Statistic Lehmann 1975)
NORMAL 常态分配的检定 (Test Statistic for Normality)若观察体个数少于 51 则采用Shapiro-Wilk 的 W Statistic 的方法检定否则采用用 Kolomogorov;

为啥这个ods output 后面有这么多 左边(统计量的模块名称)=右边(输出数据集名字)...因为这个过程步能干很多事...所以就多咯...还是看一张图~

还是右键查看属性,然后看名称,是不和ods output中的那个单词很像....

proc freq统计量输出

proc freq也是一个很常用的过程步,卡方检验啥的都可以用这个过程步....同样会产生统计量,当然最长用的就是P-value的输出...那么来看看这个过程步如何输出的..还是看一段代码...

代码语言:javascript复制
/*************************************
为研究某职业人群颈椎病发病的性别差异,今随机抽查了该职业人群男性120人和女性110人,发现男性中有36人患有颈椎病,女性中有22人患有颈椎病。试作统计推断
设 原假设H0:俩组人群无差异  备择假设H1:俩组人群有显著性差异.

卡方输出统计量:采用output形式输出统计量到指定数据集
CrossTabFreqs输出行列表的频数和百分率、
CMH输出CMH检验的统计量和p值、
FishersExact输出Fisher确切概率检验的p值、
Chisq输出卡方检验的统计量和p值
**************************************/
Proc datasets library=work kill nolist;
quit;
data a;
input g1 g2 val;
cards;
1 1 36
1 2 84
2 1 22
2 2 88
;
run;
ods listing  ;
ods html close ;
Ods Output CrossTabFreqs=CrossTabFreqs1 CMH=CMH Chisq=Chisq   FishersExact=FishersExact CommonRelRisks=CommonRelRisks;
proc freq data=a ; 
table  g1*g2/Expected CMH Chisq Fisher;
weight Val ;
run;
ods output close;

注释里面有一段例子,忘记从哪儿抄到的,同样ods后面有好几个输出的数据集..接下来还是看一张图~

看到这里,有没有发现什么规律,我想应该都发现了,那就是ods output 要输出的统计量,都是分模块的,一个模块一个数据集,那么我们如何知道我们要的东西在那个模块,所在模块的名称又是啥,就可以先不输出数据集运行一次,然后在通过右键属性,这样得到模块的名称,在将ods output 加到代码中,当然如果你记性好,也可以背下来,当然不想背下来,也可以设置到快捷键里面去。。。就想小编,从来不被代码,这些都设置到快捷键里面,敲俩个字就都弹出说明来了...快捷键如何设置,可以看小编的历史文章...

小结一下

基本上所以的统计过程步都可以利用上面的方法进行统计量的输出...并非小编举了3个过程步的例子,就只能这三个过程步用,几乎常见所有的统计相关的过程步都可以这样输出的统计量..例子不在多举,几万字也举不完...

OdsSelect选择输出的模块

在运用统计过程步的时候,有时候我们只想要输出某一块的东西,这个时候就可以用ods select过程步..举个例子。今天有人问,proc u~过程步只输出图。接下来看代码。这个select后面模块的名字其实就是上面一样的道理...

代码语言:javascript复制
ods html;
ods select Plots;
proc univariate data=sashelp.class  plot  ;              
var weight;
run;

proc compare相关的输出

ods output其实并不仅仅可以输出统计量,还能将一些过程步产生的结果进行输出到数据集中...就好比proc compare过程步..

不举例了~有兴趣可以照着上面的方式试一试....

sas

0 人点赞