Can anybody help with an alternative dynamic code that can work with upto 12*12 matrix for the below code without using Proc IML:-
data abc;
input a b;
cards;
1 1
2 2
;
run;
proc iml;
use abc;
read all into A1;
B1=A1**12;
create def from B1;
append from B1;
close def;
print A1;
print B1;
quit;
Hello @Venky3110,
I think you can build something around the CALL POWER routine of PROC FCMP.
Here's a quick example:
proc fcmp outlib=work.funcs.test;
subroutine matpow(inds $, outds $, e);
array A1[12,12] / nosymbols;
array B1[12,12] / nosymbols;
rc=read_array(inds, A1);
call dynamic_array(B1,dim1(A1),dim2(A1));
call power(A1, e, B1);
rc=write_array(outds,B1);
endsub;
run;
options cmplib=work.funcs;
data have;
input a b;
cards;
1 2
3 4
;
data _null_;
call matpow('have','want',12);
run;
proc print data=want noobs;
run;
Result:
B11 B12 138067399 201223170 301834755 439902154
You could use a DATA step with an array
data want;
set abc;
array x _numeric_;
do i=1 to dim(x);
x(i)=x(i)**12;
end;
drop i;
run;
@PaigeMiller Thanks for response.But the output is not matching with my requirement
@Venky3110 wrote:
@PaigeMiller Thanks for response.But the output is not matching with my requirement
Sorry, disregard my answer above. I forgot that IML ** is different than data step **.
Hello @Venky3110,
I think you can build something around the CALL POWER routine of PROC FCMP.
Here's a quick example:
proc fcmp outlib=work.funcs.test;
subroutine matpow(inds $, outds $, e);
array A1[12,12] / nosymbols;
array B1[12,12] / nosymbols;
rc=read_array(inds, A1);
call dynamic_array(B1,dim1(A1),dim2(A1));
call power(A1, e, B1);
rc=write_array(outds,B1);
endsub;
run;
options cmplib=work.funcs;
data have;
input a b;
cards;
1 2
3 4
;
data _null_;
call matpow('have','want',12);
run;
proc print data=want noobs;
run;
Result:
B11 B12 138067399 201223170 301834755 439902154
@FreelanceReinh Thanks for the code. It is working fine. The output is perfect.
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.