Problem mit der "Nachbar-Gruppierung"

Hallo zusammen,

ich habe folgendes Problem: ich muss ausgehend von einer nummerischen Variable eine Gruppierung erzeugen, die die "benachbarten" Werte dieser Variable einschließt, wobei "Nachbarn" die Werte sind, die eine Differenz<10 haben. Als Beispiel: es gibt eine Variable VAR1 mit den Werten 1, 3, 4, 17, 19, 34, 35, 36, die Datei ist nach dieser Variable aufsteigend sortiert. Ich muss eine neue Variable VAR2 erzeugen, die für die Zeilen mit VAR1=1,3, oder 4 den Wert VAR2=1 nimmt, für die Zeilen mit VAR1=17 oder 19 den Wert VAR2=2 nimmt und für die Zeilen mit den Werten VAR1=34, 35 oder 36 den Wert VAR2=3 nimmt.
Also, ausgehend von

VAR1
1
3
4
17
19
34
35
36

möchte ich

VAR1 VAR2
1 1
3 1
4 1
17 2
19 2
34 3
35 3
36 3

bekommen.
(Dies ist natürlich nur ein Beispiel, ich brauche es für einen viel größeren Datensatz).

Wer weiß, wie es geht?
Danke im Voraus,
Denis

Es gibt für diese Beispiel 2 mögliche Lösungen...

Hallo Denis,

für Dein konkretes Beispiel gibt es 2 Möglichkeiten.

data a;
input var1;
cards;
1
3
4
17
19
34
35
36
;
run;

proc sort data=a;
by var1;
run;
/* 1.) Abstand >10 zum jeweiligen Beginn der vorherigen Gruppe */
data b;
set a;
by var1;
retain merke;
if _n_=1 then do;
merke=var1;
var2=1;
end;
if var1-merke>10 then do;
merke=var1;
var2+1;
end;
run;
/* 2.) Abstand >10 zum jeweiligen Vorgänger */

data c;
set a;
merke=lag(var1);
if _n_=1 then do;
var2=1;
end;
else do;
if var1-merke>10 then do;
var2+1;
end;
end;
run;

Für Dein Beispiel führen beide zum selben Ergebnis.

Viele Grüße
Wolfgang

Vielen Dank, die zweite

Vielen Dank,

die zweite Variante ist gerade das, was ich wollte!

Gruppenverarbeitung

Ich nehme an, dass die Beobachtungen 34 35 und 36 eigentlich zur Gruppe 4 gehören.
Wenn ja könnten Sie das Problem wie folgt angehen:
data a;
input var1;
cards;
1
3
4
17
19
34
35
36
;
run;

data b;
set a;
var2=int(var1/10)+1;
run;
Gruss Mk

Ich nehme an, dass die

Ich nehme an, dass die Beobachtungen 34 35 und 36 eigentlich zur Gruppe 4 gehören.
Nein, die Gruppen müssen nur ausgehend von den Differenzen zwischen den Werten gebildet werden, ohne den Bezug auf konkrete Werte. Zum Beispiel in der Reihe 1, 3, 19, 20, 21, 36, 38, 43, 55, 57 werden die Gruppen {1,3}, {19,20,21}, {36,38,43} und {55,57} gebildet.
Die konkreten Nummern der Gruppen sind irrelevant, sie müssen nur verschieden sein für verschiedene Gruppen.

und wie gruppieren Sie

und wie gruppieren Sie dann
4
5
6
13
14
15
...
etc.
eine Gruppe (4 5 6 13) zweite Gruppe (5 6 13 14) dritte Gruppe (6 13 14 15)
oder wie sonst?
Ist das Problem denn eindeutig lösbar?

Ja, lösbar, denn entscheidend

Ja, lösbar, denn entscheidend sind die "Lücken": sofern eine "Lücke" von mindestens 10 zwischen den Zahlen ensteht, beginnt eine neue Gruppe. Wenn keine solche "Lücke" gibt, wächst die aktuelle Gruppe weiter. 4, 5, 6, 13, 14, 15 ist eine Gruppe, denn Abstände zwischen jeweils zwei Nachbarn ist immer<10.