Statistical programming, matrix languages, and more

How to return the number of declared inputs for the function in SAS IML

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 6
Accepted Solution

How to return the number of declared inputs for the function in SAS IML

I would like to replicate following Matlab code with SAS IML:


%%% Trace function %%%
function val = mytrace(A,B)
if (nargin == 1)
   val = sum(diag(A));
elseif (nargin == 2)
   val = sum(sum(A.*B));
end
return
%%% end of mytrace.m %%%

 

I am wondering if there is any similar function in SAS which would return the number of declared inputs for the function just as the nargin(FUN) in matlab?

 

Thanks!


Accepted Solutions
Solution
a month ago
Frequent Contributor
Posts: 136

Re: How to return the number of declared inputs for the function in SAS IML

I don't think there is a direct analog of 'nargin' in IML, however you could achieve the same effect by giving the input matrix B a blank default value, and then testing the type of matrix B, it will be undefined(U) if the call to the function has not provided a matrix B, or it will be numeric (N) if a value for B is given.  The syntax would be along the following lines:

  start mytrace(A, B=);
    if type(B)='U' then return(trace(A)); else etc..;
  finish;

View solution in original post


All Replies
Solution
a month ago
Frequent Contributor
Posts: 136

Re: How to return the number of declared inputs for the function in SAS IML

I don't think there is a direct analog of 'nargin' in IML, however you could achieve the same effect by giving the input matrix B a blank default value, and then testing the type of matrix B, it will be undefined(U) if the call to the function has not provided a matrix B, or it will be numeric (N) if a value for B is given.  The syntax would be along the following lines:

  start mytrace(A, B=);
    if type(B)='U' then return(trace(A)); else etc..;
  finish;
SAS Super FREQ
Posts: 3,475

Re: How to return the number of declared inputs for the function in SAS IML

I agree with Ian.  You can use default parameter values. If necessary, you can use the ISSKIPPED function in a module to determine if an argument was provided or if the default value is being used.  You might enjoy reading the article "Everything you wanted to know about writing SAS/IML modules," which links to additional articles about default parameter values.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 277 views
  • 5 likes
  • 3 in conversation