Computing the variance of each column of a matrix


In a previous blog post about computing confidence intervals for rankings, I inadvertently used the VAR function in SAS/IML 9.22, without providing equivalent functionality for those readers who are running an earlier version of SAS/IML software. (Thanks to Eric for pointing this out.)

If you are using a version of SAS/IML prior 9.22, the following module computes the variance of each column of a matrix, and correctly handles missing values in the data:

/** Var: return sample variance of each column of a data matrix **/
/** For this module
  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[i] = sum(x[,i]^=.); /** in each column **/
   var = (x-mean)[##,] / (countn-1);
return ( var );

This module appears in Appendix D of my book, Statistical Programming with SAS/IML Software.


About Author

Rick Wicklin

Distinguished Researcher in Computational Statistics

Rick Wicklin, PhD, is a distinguished researcher in computational statistics at SAS and is a principal developer of PROC IML and SAS/IML Studio. His areas of expertise include computational statistics, simulation, statistical graphics, and modern methods in statistical data analysis. Rick is author of the books Statistical Programming with SAS/IML Software and Simulating Data with SAS.


  1. Pingback: Functions to know: The MEAN, VAR, and STD functions - The DO Loop

  2. Anthony Bongard on

    This is calculating the variance of each column of the matrix but I am not getting any sort of output.
    Is it just in my log? how to I get the variance to show up in an output/results form?

Leave A Reply

Back to Top