I am suppose only be able to put in 2x2 matrices and find the determinate if the matrices is a 2x2 if it is a 1x1 or a 3x3 I am suppose to print an error and if it is singular i am suppose to print another error.
What am I doing wrong?
Proc IML;
a = {1 2, 3 4};
b = {1 1, 1 1};
c = {1 2 3, 4 5 6, 7 8 9};
d = {5};
start invers(a);
nr = nrow(a);
nc = ncol(a) ;
if nr=2 & nc=2 then do;
i = det(a);
b = INV(a);
if i ^= 0 then return(b);
else if i = 0 then print("Singular");
end; else print("error");
finish;
w = invers(a);
x = invers(b);
y = invers(c);
z = invers(d);
print w, x, y, z;
Inverting a singular matrix causes an error so the INV function needs to be moved inside the 'if'. To avoid further errors it is necessary to always return something from the function module. I usually use syntax like return(.) or return(0) when an error occurs. Then the calling program can test for these return codes and know that an error has occurred.
inside what if statement?
Don't attempt to invert the matrix unless it has passed the i^=0 test.
so would this work?
if i ^=0 then return (a**(-1))
Yes that should work, or return(inv(a)).
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 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.