SAS Employee
Posts: 21

# How to calculate difference between two vectors in a matrix format

Hi,

I need to calculate the difference between a row vectror and a column vector in a matrix. For example:

vr = {10 15}

vc = {5 10}

m = {5 10,

0 5}

m = is the difference between them. m[1.1] = vr[1] - vc[1], m[1,2] = vr[2] - vc[1] etc.

Currently I am doing this using a loop. Is there a way to accomplish this using vector/matrix notation?

Thanks,

Eyal

Regular Contributor
Posts: 163

## Re: How to calculate difference between two vectors in a matrix format

The repeat function is one way of doing this.  For example:

proc iml;

vr = {10 15};

vc = {5, 10};

m=repeat(vr,2,1)-repeat(vc,1,2);

print m;

quit;

where 2 is the length of both vectors.  Note that in your example vc is not a column vector, so I have added a comma above.

Hope that helps.

SAS Super FREQ
Posts: 4,176

## Re: How to calculate difference between two vectors in a matrix format

Ian has the right idea, although you only need to use the REPEAT function once:

vr = {10 15};
vc = {5 10};

v = repeat(vr, ncol(vc)); /* repeat vector to create matrix */
m = v - vc`;  /* subtract i_th element from i_th row */
print m;

For details, see this article on "Shorthand notation for row and column operations."

Discussion stats
• 2 replies
• 1020 views
• 3 likes
• 3 in conversation