2017-10-17 5 views
1

das ist wahrscheinlich ein einfacher.SAS: Erstellen von Klassen durch Aufzählung

Ich muss eine Variable erstellen, die wie eine Bestellung ist, aber die Reihenfolge erhöht sich erst nach jeder zweiten Beobachtungen.

Vielen Dank im Voraus!

date order 
1-1-10 1 
2-1-10 1 
3-1-10 2 
4-1-10 2 
5-1-10 3 
6-1-10 3 
7-1-10 4 
7-1-10 4 

etc 

Antwort

2

Sie werden zwei primäre Tools verwenden: Die mod-Funktion und eine Summenanweisung. Die Summenanweisung sieht wie eine falsche Syntax aus, ist aber ein Sonderfall von retain.

_N_ ist eine spezielle Variable, die als Ihr Beobachtungszähler fungiert. Jedes Mal, wenn Ihr Schritt data von oben nach unten (dh von data zu run) schleift, wird _N_ um eins erhöht.

Mithilfe von mod unter _N_ können wir einen Zähler für alle zwei Beobachtungen um 1 erhöhen, wenn das Ergebnis 1 ist. Mit anderen Worten, wenn Sie einen Beobachtungszähler durch 2 teilen und einen Rest von 1 erhalten, addieren Sie 1 zu order.

Zum Beispiel:

_N_ _N_/2 Remainder Operation Value 
1 1/2  1   0+1   1 
2 2/2  0   N/A   1 
3 3/2  1   1+1   2 
4 4/2  0   N/A   2 
5 5/2  1   2+1   3 
6 6/2  0   N/A   3 

Letztlich sind wir eine Operation zu tun, wo wir einen gewissen Wert zu einem bestimmten Zustand erhöhen, tragen sie nach vorne und wiederholen.

Wie dieser Code aussieht:

data want; 
    set have; 

    if(mod(_N_, 2) = 1) then order+1; 
run; 
+2

Oder seit mod (int, 2) liefert 0 oder 1 Sie einfach benutzen könnte 'order + mod (_N_, 2),' – Tom

0

Im Datenschritt können Sie die automatische Variable _n_, z. ceil(_n_/2).

In SQL, monotonic() Funktion kann den gleichen Job machen.

Verwandte Themen