Help using Base SAS procedures

next observation

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 118
Accepted Solution

next observation

Hello,

I know that when we want the previous observation, we use (lag) function

What can I use when I want next observation?


Accepted Solutions
Solution
‎09-12-2014 05:48 PM
Trusted Advisor
Posts: 1,228

Re: next observation

Hi,

Please see below.

data have;
input Obs    Height;
datalines;
1     69.0
2     56.5
3     65.3
4     62.8
5     63.5
;

Proc sql;
Select have.*, next.*
from have left join have as next
on have.obs + 1 = next.obs;
Quit;

View solution in original post


All Replies
Valued Guide
Posts: 765

Re: next observation

here's one idea ...

data new;

merge sashelp.class (keep=height) sashelp.class (firstobs=2 keep=height rename=(height=nextheight));

run;

Obs    Height    nextheight

  1     69.0        56.5

  2     56.5        65.3

  3     65.3        62.8

  4     62.8        63.5

  5     63.5        57.3

  6     57.3        59.8

  7     59.8        62.5

  8     62.5        62.5

  9     62.5        59.0

10     59.0        51.3

11     51.3        64.3

12     64.3        56.3

13     56.3        66.5

14     66.5        72.0

15     72.0        64.8

16     64.8        67.0

17     67.0        57.5

18     57.5        66.5

19     66.5          .

Regular Contributor
Posts: 233

Re: next observation

Trusted Advisor
Posts: 1,228

Re: next observation

data have;
input a;
datalines;
1
2
3
4
5
;

Proc sql;
Select have.a, next.a as next_obs
from have left join have as next
on have.a + 1 = next.a;
Quit;

Valued Guide
Posts: 765

Re: next observation

Hi ... have you tried your solution with some data other than 1 2 3 4 5 (anything that is not just a bunch of consecutive values)?

Solution
‎09-12-2014 05:48 PM
Trusted Advisor
Posts: 1,228

Re: next observation

Hi,

Please see below.

data have;
input Obs    Height;
datalines;
1     69.0
2     56.5
3     65.3
4     62.8
5     63.5
;

Proc sql;
Select have.*, next.*
from have left join have as next
on have.obs + 1 = next.obs;
Quit;

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 268 views
  • 0 likes
  • 4 in conversation