Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %macro mult_matrix(in1=, in2=, out1=);
- %do i = 1 %to 2;
- proc contents data = &&in&i.. out = __m&i.(keep=name varnum nobs) noprint;
- run;
- * 変数名・行数・列数をマクロ変数に格納 ;
- data _null_;
- set __m&i. end = eof;
- call symputx("x&i._" || compress(put(_n_, best.)), name);
- if eof then do;
- call symputx("r&i.", nobs);
- call symputx("c&i.", varnum);
- end;
- run;
- * 変数名を変換 ;
- data _m&i.;
- set &&in&i..;
- rename %do j = 1 %to &&c&i..;
- &&x&i._&j.. = x&i._&j.
- %end;
- ;
- run;
- %end;
- * 行列の積を計算 ;
- proc ds2;
- data &out1. / overwrite = yes;
- drop i x:;
- declare double i;
- vararray double x1_[&c1.];
- vararray double x2_[&c2.];
- vararray double z[&c2.];
- declare package matrix m1 m2 m3;
- method init();
- m1 = _new_ [this] matrix(&r1., &c1.);
- m2 = _new_ [this] matrix(&r2., &c2.);
- do i = 1 to &r1.;
- set _m1;
- m1.in(x1_, i);
- end;
- do i = 1 to &r2.;
- set _m2;
- m2.in(x2_, i);
- end;
- end;
- method term();
- m3 = m1.mult(m2);
- do i = 1 to &r1.;
- m3.out(z, i);
- output;
- end;
- end;
- enddata;
- run;
- quit;
- %mend mult_matrix;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement