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