2016-12-26 3 views
0

I verschiedene Länder haben und müssen letzte 2 Beobachtungen der einzelnen LänderErhalten letzte 2 Beobachtungen der einzelnen Länder

India 200 
India 300 
India 400 
US 1000 
US 2000 
US 3000 
US 4000 

ich soll -

India 300 
India 400 
US 3000 
US 4000 
+0

Ich weiß, dass es eine Sprachbarriere, aber können Sie ein wenig erläutern? – johnny

+0

Identifizieren Sie die "letzten zwei" anhand der letzten zwei Datensätze basierend auf der Reihenfolge oder nach dem Betrag in der zweiten Variablen? – Reeza

Antwort

1

kann es ein kürzerer Weg sein, aber dies funktionieren wird :

data have; 
country = "INDIA"; 
pop = 200; 
output; 
country = "INDIA"; 
pop = 500; 
output; 
country = "INDIA"; 
pop = 300; 
output; 
country = "US"; 
pop = 1200; 
output; 
country = "US"; 
pop = 1400; 
output; 
country = "US"; 
pop = 900; 
output; 
country = "US"; 
pop = 1500; 
output; 
country = "INDIA"; 
pop = 700; 
output; 
run; 

proc sort data=have; 
by country descending pop; 
run; 

data have; 
set have; 
by country; 
retain cnt; 
if first.country then cnt = 1; 
else cnt = cnt + 1; 
run; 

proc sql noprint; 
create table want as 
select country,pop from have 
where cnt < 3;quit; 
0

Dies setzt voraus, dass Ihre Daten nach Ländern gruppiert sind. Ich nehme an, Sie würden dies eine Art Fusion von vornherein nennen.

data country; 
    input country $ x; 
    cards; 
India 200 
India 300 
India 400 
NZ 4567 
US 1000 
US 2000 
US 3000 
US 4000 
;;;; 
    run; 
data last2; 
    merge country country(firstobs=3 keep=country rename=(country=z)); 
    if country ne z; 
    run; 
proc print; 
    run; 

enter image description here

Verwandte Themen