Help using Base SAS procedures

Select seond observation

Reply
Contributor
Posts: 47

Select seond observation

When i have a table like below, how can i select the second observation ?

 

crn      id     lastname

230     12     poole

230     13     sandy

230     14     cook

230      15   daniela

150     13    sandy

150     22    bob

150     18    cem

 

so i need to pick same crn's second lastname

 

crn     id      lastname

230   13      sandy

150    22     bob

 

 

thank you 

Valued Guide
Posts: 858

Re: Select seond observation

Here is a solution:

 

data have;
input crn$ id lastname$;
cards;
230     12     poole
230     13     sandy
230     14     cook
230     15     daniela
150     13     sandy
150     22     bob
150     18     cem
;

data want;
set have;
by descending crn;
count + 1;
if first.crn then count = 1;
if count = 2 then output want;
drop count;
run;

Super User
Super User
Posts: 7,401

Re: Select seond observation

Hi,

 

data want;
  set have; 
  by crn;
  if first.crn then temp_obs=1;
  else temp_obs=temp_obs+1;
  if temp_obs=2 then output;
run;

ASsumes the data is sorted by crn, you can change the 2 to be any obs.

Trusted Advisor
Posts: 1,115

Re: Select seond observation

Or you could try this:

data want;
do _n_=1 by 1 until(last.crn);
  set have;
  by crn notsorted;
  if _n_=2 then output;
end;
run;

This does not assume that HAVE is sorted by (ascending or descending) CRN, but it must be grouped in the sense that observations with the same value of CRN form a block of contiguous observations.

 

Is it okay that CRNs with only one observation in HAVE do not occur in WANT?

Ask a Question
Discussion stats
  • 3 replies
  • 401 views
  • 0 likes
  • 4 in conversation