About this blog
Rick Wicklin, PhD, is a senior 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, statistical graphics, and modern methods in statistical data analysis. Rick is author of the book Statistical Programming with SAS/IML Software.

Follow @RickWicklin on Twitter.
Subscribe to this blog
Tags
Archives
For each observation, find the variable that contains the minumum value
The other day I encountered an article in the SAS Knowledge Base that shows how to write a macro that “returns the variable name that contains the maximum or minimum value across an observation.” Some people might say that the macro is “clever.” I say it is complicated. This is [...]
Post a Comment How to read data set variables into SAS/IML vectors
One of the first skills that a beginning SAS/IML programmer learns is how to read data from a SAS data set into SAS/IML vectors. (Alternatively, you can read data into a matrix). The beginner is sometimes confused about the syntax of the READ statement: do you specify the names of [...]
Post a Comment Checking your answers: Are computed values close to the true values?
In statistical programming, I often test a program by running it on a problem for which I know the correct answer. I often use a single expression to compute the maximum value of the absolute difference between the vectors: maxDiff = max( abs( z-correct ) ); /* largest absolute difference [...]
Post a Comment The DIF function: Compute lagged differences and finite differences
To a statistician, the DIF function (which was introduced in SAS/IML 9.22) is useful for time series analysis. To a numerical analyst and a statistical programmer, the function has many other uses, including computing finite differences. The DIF function computes the difference between the original vector and a shifted version [...]
Post a Comment The LAG function: Useful for more than time series analysis
To a statistician, the LAG function (which was introduced in SAS/IML 9.22) is useful for time series analysis. To a numerical analyst and a statistical programmer, the function provides a convenient way to compute quantitites that involve adjacent values in any vector. The LAG function is essentially a “shift operator.” [...]
Post a Comment BY-group processing in SAS/IML
Because the SAS/IML language is a general purpose programming language, it doesn’t have a BY statement like most other SAS procedures (such as PROC REG). However, there are several ways to loop over categorical variables and perform an analysis on the observations in each category. One way is to use [...]
Post a Comment Vectorized computations and the birthday matching problem
The birthday matching problem is a classic problem in probability theory. The part of it that people tend to remember is that in a room of 23 people, there is greater than 50% chance that two people in the room share a birthday. But the birthday matching problem is also [...]
Post a Comment Count missing values in observations
Locating missing values is important in statistical data analysis. I’ve previously written about how to count the number of missing values for each variable in a data set. In Base SAS, I showed how to use the MEANS or FREQ procedures to count missing values. In the SAS/IML language, I [...]
Post a Comment ANY versus ALL: Testing the elements of a vector
The fundamental units in the SAS/IML language are matrices and vectors. Consequently, you might wonder about conditional expression such as if v>0 then…. What does this expression mean when v contains more than a single element? Evaluating vector expressions When you test a vector for some condition, expressions like v>0 [...]
Post a Comment Row vectors versus column vectors
The SAS/IML language supports both row vectors and column vectors. This is useful for performing linear algebra, but it can cause headaches when you are writing a SAS/IML module. I want my modules to be able to handle both row vectors and column vectors. I don’t want the user to [...]
Post a Comment 