全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2346 2
2016-06-22
IML计算有三个用处:
1、验证SAS计算统计量计算过程
2、建模是对于多个变量的处理(探索、哑变量)
3、更适用于算法
----以下是使用sashelp中的iris数据,使用IML计算了样本均值、样本方差、协方差矩阵和样本系数相关矩阵等----
验证则使用了means过程和corr过程。

/*1 载入iris数据*/

data iris;

setsashelp.iris;

run;

/*2 读入矩阵-存储矩阵*/

proc iml;

use iris;

read all var _num_ into ir;

close iris;

store ir;

quit;

/*3 载入矩阵*/

proc iml;

load  ir;

/*计算样本均值*/

ir_m=ir[:,];

/*计算x-avg(x):猜测sas是以向量为单位操作的*/

ir_t=ir-ir_m;

/*计算平方*/

ir_svar=ir_t[##,];

/*计算样本方差*/

ir_res=ir_svar[+,];

/*巧妙一点的方法来计算非缺失变量的个数*/

/*ir_row=nrow(ir);*/

ir_r1=ir/ir;

/*为了和proc means 验证,减掉一个自由度,在大样本的时候差异不大*/

ir_row=ir_r1[+,]-1;

/*均方差体现*/

ir_square=sqrt(ir_res/ir_row);

/*print ir_res ir_row  ir_square;*/

/*ir_t是每列与均值的差,存储这个结果来计算协方差*/

store ir_tir_square;

quit;

/*4 计算样本协方差*/

proc iml;

load ir_t ;

row=nrow(ir_t);

col=ncol(ir_t);

ir_cov=j(4,4,0);

do i=1 to col;

do j=1 to col;

tem=ir_t[,i]#ir_t[,j];

ir_cov[i,j]=tem[+,]/(row-1);

end;

end;

store ir_cov;

quit;

/*5 计算协方差矩阵*/

proc iml;

load ir_covir_square;

dim=ncol(ir_cov);

ir_idx=j(dim,dim,0);

do i=1 to dim;

do j=1 to dim;

ir_idx[i,j]=ir_cov[i,j]/(ir_square[,i]*ir_square[,j]);

end;

end;

print ir_idx;

quit;

[size=21.3333px]验证:

ods graphics on;

proc corr data=iris(keep= _numeric_) plots=matrix(histogram);

run;


ods graphics off;

结果1:散点图矩阵

MatrixPlot.png

结果二:corr过程统计量

相关系数矩阵

结果三:IML计算出的相关系数矩阵

计算结果


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-7-2 15:49:07
可否计算 各个组内的均值方差或其他统计量 ?   类似于 group by  Species  这样的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-4 15:26:48
sas9.4 发表于 2016-7-2 15:49
可否计算 各个组内的均值方差或其他统计量 ?   类似于 group by  Species  这样的
应该是可以的,有空我会再用矩阵算其他统计量的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群