## BASE SAS

Solved
Frequent Contributor
Posts: 76

# BASE SAS

Hii I have following input

Input dataset :

id      max   score

101     20        45

101     32        65

101     28        50

output :

id      max   score  change

101     20        45          5

101     28        50         15

101     32        65          .

pls  help me  out

Accepted Solutions
Solution
‎04-06-2017 04:33 AM
Super User
Posts: 6,939

## Re: BASE SAS

Perhaps:

proc sort data=have;

by id score;

run;

data want;

set have;

by id;

if last.id=0 then do;

_n_ = _n_ + 1;

set have (keep=score rename=(score=next_score)) point=_n_;

change = next_score - score;

end;

drop next_score;

run;

All Replies
Posts: 3,293

## Re: BASE SAS

I don't understand how the column named change is computed. You didn't explain that.

--
Paige Miller
Solution
‎04-06-2017 04:33 AM
Super User
Posts: 6,939

## Re: BASE SAS

Perhaps:

proc sort data=have;

by id score;

run;

data want;

set have;

by id;

if last.id=0 then do;

_n_ = _n_ + 1;

set have (keep=score rename=(score=next_score)) point=_n_;

change = next_score - score;

end;

drop next_score;

run;

Frequent Contributor
Posts: 76

## Re: BASE SAS

Is there any way to get the observations of one varaible to other by excluding the first value of that varaible ie

score  score2

45        50

50        64

65

Super User
Posts: 10,860

## Re: BASE SAS

```data have;
input id      max   score;
cards;
101     20        45
101     32        65
101     28        50
;
run;
proc sort data=have;by id score;run;
data want;
merge have have(keep=id score rename=(id=_id score=_score) firstobs=2);
if id=_id then diff=_score-score;
drop _:;
run;

```
🔒 This topic is solved and locked.