slope across variables in each row

Occasional Contributor
Posts: 7

slope across variables in each row

How do I calculate the slope of few variables for each row assuming delta X between variables is =1

Example:

 ID v1 v2 v3 v4 v5 slope a 2 4 6 8 10 ? b 60 70 95 106 120 ? c d e

Thanks

SAS 6.1

Super User
Posts: 13,941

Re: slope across variables in each row

Do you mean by "delta x between variables" that you have the equivalent of coordinates such as (1,2), (2,4), (3,6), (4,8) and (5,10)?

And do you want the slope of a best fit line through the points? The first line has a constant slop of 2 between any two pairs but the second row has different slopes between different pairs so a request for a single slope needs some clarification.

If the slope of a "best fit" line is desired I would transform the data into actual x,y coordinates and then run the result through proc reg with the Id as a by variable to get the result for each group:

``````data have;
input ID \$ v1 v2 v3 v4 v5 ;
datalines;
a 2 4 6 8 10
b 60 70 95 106 120
;
run;

data trans;
set have;
array v v1-v5;
do x= 1 to 5;
y= v[x];
output;
end;
keep id x y;
run;
proc reg data=trans;
by id;
model y=x;
run;``````

The Parameter estimate for X is the slope you may want.

If you want to merge that back onto the original research the options for Prog Reg on output to get a data set  and then merge by ID.

Super User
Posts: 24,010

Re: slope across variables in each row

[ Edited ]

This assumes a linear trend, with your X's being 1-5 in your case and does not deal with missing values.

In this case there are 6 obs but changing it to 5 is a trivial task.

Overall, I would recommend a transpose and proc reg instead as well.

``````data test;
input x1 x2 x3 x4 x5 x6;
datalines;
-0.069965723 0.492749371 0.955245597 1.346963522 1.701118239 2.523141195
;
run;

data slope;
set test;
array ys(6) x1-x6;
array vals(6) (1 2 3 4 5 6);
xbar = mean(of vals(*));
ybar = mean(of ys(*));

do i=1 to dim(vals);

num=sum(num, (vals(i)-xbar)*(ys(i)-ybar));
den=sum(den, (vals(i)-xbar)**2);

end;

slope = num/den;
run;``````

Discussion stats
• 2 replies
• 458 views
• 1 like
• 3 in conversation