SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 663|回复: 2
打印 上一主题 下一主题

请教高手一个关于IML特征值累计的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-11-5 14:22:44 | 只看该作者

请教高手一个关于IML特征值累计的问题

在SAS的IML里面,如果求出特征值比如为eig=(5,4,3,2,1),我现在想找前特征值和累计大于等于70%的所有特征值,并返回一个向量,这里应该是eig=(5,4,3),请问怎么实现?注意,这里的特征值是动态的,并非就是5维的。我只知道在DATA步里面非常容易,用RETAIN语句就可以搞定。
多谢高手!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-11-5 15:30:23 | 只看该作者

Re: 请教高手一个关于IML特征值累计的问题

特征值累计是搞定了,但是最后求出的主成分和proc princomp不一样,高手给我看看这是为什么?多谢!下面是code:
%let n=5;

proc iml;
reset deflib=work;
a={22  10   2   3   7,
      14   7  10   0   8,
      -1  13  -1 -11   3,
      -3  -2  13  -2   4,
       9   8   1  -2   4,
       9   1  -7   5  -1,
       2  -6   6   5   1,
       4   5   0  -2   2};
create tb from a;
append from a ;
call svd(u,q,v,a);
reset fuzz;
print a u q v ;

sq=sum(q);
print sq;

dq=diag(q);
print dq;
trace=trace(dq);
print trace;

retain_eig={0};
idx={0};
do i=1 to &n.;
eig=q[i];
retain_eig=retain_eig+eig;

rate_eig=retain_eig/sq;
if rate_eig >= 0.7 then do;idx=i; new_eig=q[1:idx];stop;end;
end;
print retain_eig;
print idx;
print new_eig;

u1=u[1:idx,];
print u1;

p=a*(u1)`;
print p;


quit;


proc princomp data=tb out=tb1;
run;

结果,IML里面最后作出的P和PROC 出来的ta1中的主成分不一样。估计是P的公式有问题,但是实在没有找出来。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-11-5 16:10:46 | 只看该作者

Re: 请教高手一个关于IML特征值累计的问题

有谁知道IML里面有函数直接对原矩阵进行标准化吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-3-4 00:43 , Processed in 0.098512 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表