05-08-2013 08:18 AM
I would like to know if in proc iml there is a command similar to the “By” command of many SAS procedures. I have to create a matrix product t(x)*A*x using the same matrix A but different x vectors.
All x vectors are stored in the same dataset (INPUT) which has a varaible used to filter the different vectors.
BY_VARIABLE | X |
AT | X1 |
AT | X2 |
DE | X1 |
DE | X2 |
FR | X1 |
…. |
Currently I make a cycle on the different values of BY_VARIABLE, filter the dataset based on that value, make the proc iml and store the output in a dataset. I would like to know if it’s possible to use the entire INPUT dataset in the proc iml, specify which is the BY variable and output a dataset with the BY_VARIABLE and the results of the matrix product for each value.
Thanks in advance
Federica
05-08-2013 09:04 AM
There is not a BY statement because the SAS/IML statement operates on matrices, not just vectors. (It also has a DO loop and other features for processing multiple groups.)
For your example, let Y be the matrix whose i_th column is the vector for the i_th value of the BY variable. Then
M = t(Y)*A*Y
computes all products that appear in the output data set. There is no need to filer the data prior to calling PROC IML, nor to create/append multiple data sets. One IML operation is all it takes.