Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. %macro mult_matrix(in1=, in2=, out1=);
  2.  
  3. %do i = 1 %to 2;
  4. proc contents data = &&in&i.. out = __m&i.(keep=name varnum nobs) noprint;
  5. run;
  6.  
  7. * 変数名・行数・列数をマクロ変数に格納 ;
  8. data _null_;
  9. set __m&i. end = eof;
  10. call symputx("x&i._" || compress(put(_n_, best.)), name);
  11. if eof then do;
  12. call symputx("r&i.", nobs);
  13. call symputx("c&i.", varnum);
  14. end;
  15. run;
  16.  
  17. * 変数名を変換 ;
  18. data _m&i.;
  19. set &&in&i..;
  20. rename %do j = 1 %to &&c&i..;
  21. &&x&i._&j.. = x&i._&j.
  22. %end;
  23. ;
  24. run;
  25. %end;
  26.  
  27. * 行列の積を計算 ;
  28. proc ds2;
  29. data &out1. / overwrite = yes;
  30. drop i x:;
  31. declare double i;
  32. vararray double x1_[&c1.];
  33. vararray double x2_[&c2.];
  34. vararray double z[&c2.];
  35.  
  36. declare package matrix m1 m2 m3;
  37.  
  38. method init();
  39. m1 = _new_ [this] matrix(&r1., &c1.);
  40. m2 = _new_ [this] matrix(&r2., &c2.);
  41.  
  42. do i = 1 to &r1.;
  43. set _m1;
  44. m1.in(x1_, i);
  45. end;
  46.  
  47. do i = 1 to &r2.;
  48. set _m2;
  49. m2.in(x2_, i);
  50. end;
  51. end;
  52.  
  53. method term();
  54. m3 = m1.mult(m2);
  55.  
  56. do i = 1 to &r1.;
  57. m3.out(z, i);
  58. output;
  59. end;
  60. end;
  61. enddata;
  62. run;
  63. quit;
  64.  
  65. %mend mult_matrix;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement