Statistical programming, matrix languages, and more

The simple statistical functions in SAS/IML

Posts: 35

The simple statistical functions in SAS/IML

Hi, folks:

     I try to use some simple function to compute statistics for a random variable, i.e, var for variance, std for standard deviation or mean for average. I do find some instructions online, like the following links:


How ever, when I type the following lines in the IML mode, error messages pop out:


ERROR: Not enough arguments for function STD.

where xx is a 100*1 vector generated by xx=normal(j(100,1,10));

The same thing happens if I use the var function.

However, if I instead type yy=std(xx,1) or zz=var(xx,1). Here,  I copied the covention from MATLAB where the second argument indicates we should do compuation based on rows. SAS does give me some results this time, but these results are very weird: both yy and zz are 100*1 vectors rather than scalars I expected. I use SAS under unix and the version should be SAS 9.1 or 9.2. Is there any documentation with more details to explain how to use these functions or someone can tell me the correct way to use these functions?


Occasional Contributor
Posts: 17

The simple statistical functions in SAS/IML

The problem is that the STD function has only been added to IML in SAS v9.3, you are using an earlier version. Therefore you are calling the SAS/base function STD which has different arguments. Here is its documentation

Same problem with the VAR function although this function has been added at some point earlier. I am using SAS v9.23 and for me VAR is available in IML and STD isn't.

Posts: 3,238

Re: The simple statistical functions in SAS/IML

For earlier releases of SAS/IML, you can use the following module, which appears in my book Statistical Programming with SAS/IML Software:

/* Var: return sample variance of each column of a data matrix */

/*   x     is a matrix that contains the data


start Var(x);

mean = x[:,];

countn = j(1, ncol(x));      /* allocate vector for counts */

do i = 1 to ncol(x);         /* count nonmissing values    */

countn = sum(x[,i]^=.);/* in each column             */


var = (x-mean)[##,] / (countn-1);

return ( var );


For STD, use sqrt(var(x)).

Post a Question
Discussion Stats
  • 2 replies
  • 3 in conversation