If you are a statistical programmer, sooner or later you have to compute a confidence interval. In the SAS/IML language, some beginning programmers struggle with forming a confidence interval. I don't mean that they struggle with the statistics (they know how to compute the relevant quantities), I mean that they struggle with constructing the SAS/IML vector that contains the lower and upper endpoints.

To be specific, suppose you compute some quantities, *x* and δ, and you want to form the 2x1 vector (*x*–δ, *x*+δ).
You might be tempted to write the following SAS/IML statements:

CI = { x-delta, x+delta }; /** WRONG **/ |

What is wrong with this statement?
In the SAS/IML language, curly braces are used to build matrices from *literals* only.
(In computer programming, a literal is just a fancy name for a fixed constant.) You can form a numeric matrix from numeric constants such as -1, 1.23, 2E-2, or the SAS numerical missing value, "." Character matrices are formed from string constants such as "Dog" and "Cat."

So how do you create a vector from expressions or from values that are contained in scalar variables? You use the horizontal concatenation operator (||) or the vertical concatenation operator (//), as follows:

CI = x-delta // x+delta; |

The concatenation operators have lower precedence than the arithmetic operators, so the previous statement does not require parentheses.

## 1 Comment

Pingback: A simple trick to construct symmetric intervals - The DO Loop