Solved
Contributor
Posts: 24

# Reading the first in every set of values in a column

I have a matrix (let's call it D) with 20 rows (+ column name) and 2 columns. The matrix has been sorted in a particular way, and I want to read the first of every 4 values in the the first column to another matrix. The following code worked on a small "test" dataset (small enough that I could check the results manually), but is there a reason it could produce wrong results (for example, read a number twice from a particular set of four, but zero times from another set)?

proc iml;
use sasdata.testnum;
read all var _ALL_ into D[colname = varNames];
close sasdata.testnum;
print D;

T = j(5, 1, 0);

t_row = 1;
do y = 1 to 21 by 4;
T[t_row, 1] = D[y, 1];
t_row = t_row + 1;
print T;

end;

In other words, does anyone see anything wrong with this code? Is there a better way of doing what I have done here?

Accepted Solutions
Solution
‎12-06-2015 05:53 AM
SAS Super FREQ
Posts: 4,239

## Re: Reading the first in every set of values in a column

Use this. It uses the DO function to generate the sequewnce {1, 5, 9,...}:

``````t_row = do(1, nrow(D), 4);
T = D[t_row, 1];``````

All Replies
Regular Contributor
Posts: 161

## Re: Reading the first in every set of values in a column

Have you considered using the var _n_ along with a divisibility function I believe it is called MODZ () ??

Kannan Deivasigamani
Solution
‎12-06-2015 05:53 AM
SAS Super FREQ
Posts: 4,239

## Re: Reading the first in every set of values in a column

Use this. It uses the DO function to generate the sequewnce {1, 5, 9,...}:

``````t_row = do(1, nrow(D), 4);
T = D[t_row, 1];``````
🔒 This topic is solved and locked.