Hi everybody,
I hope this message finds you well.
I have a matrix, let's say MAT, and I would like to make the product of the elements on each row and output the resulting vector in VEC.
So VEC i = product MAT[ i , 1:NCOL(MAT)].
I simply figured it out using a do loop as follows:
do i = 1 to nrow(MAT);
do r = 1 to ncol(MAT);
VEC [ i ,1]=VEC [i,1]*MAT[i,r];
end;
end;
But it takes too much time to run the above instructions since I have to run the same instructions 300,000 times (in different scenarios).
Do you have any better idea to optimize the runtime?
Thanks a lot in advance.
Raphaël
vec = mat[ , #];
SAS/IML supports many elementwise operations. Two articles you might want to read are:
"Use subscript reduction operators"
and
"Compute statistics for each row by using subscript operators"
vec = mat[ , #];
SAS/IML supports many elementwise operations. Two articles you might want to read are:
"Use subscript reduction operators"
and
"Compute statistics for each row by using subscript operators"
Thanks Rick! 🙂
It works perfectly and is 60 seconds faster for 20 scenarios.
You are my savior!
I notice that you already posted it 3 years ago in your second link...
Raphael
Great. Remember to click the "Accept as Solution" button so that others can see that the question has been answered.
Done!!
Raphaël
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.