BookmarkSubscribeRSS Feed
e3flator
Calcite | Level 5

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.

  1. E.g.

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

1 REPLY 1
Rick_SAS
SAS Super FREQ

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.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 1 reply
  • 1338 views
  • 0 likes
  • 2 in conversation