SAS中文论坛
标题:
请教高手:如何把下三角矩阵转为对称矩阵?
[打印本页]
作者:
shiyiming
时间:
2010-7-2 13:15
标题:
请教高手:如何把下三角矩阵转为对称矩阵?
比如,有一个下三角矩阵:
x1 x2 x3
1 . .
2 1 .
3 4 1
想得到对称矩阵如下:
1 2 3
2 1 4
3 4 1
怎么实现? 多谢!
作者:
shiyiming
时间:
2010-7-2 13:52
标题:
Re: 请教高手:如何把下三角矩阵转为对称矩阵?
用IML已经搞定,不知道能不能用DATA步搞定?
作者:
shiyiming
时间:
2010-7-2 14:11
标题:
Re: 请教高手:如何把下三角矩阵转为对称矩阵?
个人觉得这种问题还是用iml。
方法一:iml
[code:3uticvzs]
proc iml;
A={1 . .,2 1 .,3 4 1};
B=sqrsym(symsqr(A));
print B;
quit;
[/code:3uticvzs]
方法二:DATA步
[code:3uticvzs]
data a;
input x1-x3;
cards;
1 . .
2 1 .
3 4 1
;
run;
proc transpose data=a out=b(keep=col:);
run;
data result(drop=col: i);
merge a b;
array x{*} x:;
array col{*} col:;
do i=1 to 3;
if _n_<i then x(i)=col(i);
end;
run;
[/code:3uticvzs]
个人观点,仅供参考
作者:
shiyiming
时间:
2010-7-2 14:51
标题:
Re: 请教高手:如何把下三角矩阵转为对称矩阵?
多谢! 赞成你的看法,还是用IML比较合适.
作者:
shiyiming
时间:
2010-7-2 16:14
标题:
Re: 请教高手:如何把下三角矩阵转为对称矩阵?
写着玩的,9.2可用
[code:3hjgfunz]proc fcmp outlib=work.func.quot;
subroutine symmetric_matrix(in_ds $,out_ds $);
array in[1] /nosymbols;
array var[1] /nosymbols;
rc=read_array(in_ds,in);
n=dim(in);
call dynamic_array(var,n,n);
call transpose(in,var);
do i=1 to n;
do j=1 to n;
if i>j then var[i,j]=in[i,j];
end;
end;
rc=write_array(out_ds,var);
endsub;
run;
data a;
input x1-x3;
datalines;
1 . .
2 1 .
3 4 1
;
options cmplib=work.func;
data _null_;
call symmetric_matrix('a','b');
run;[/code:3hjgfunz]
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2