Vorige Beobachtung

Liebe Forum-Community,
wie kann ich sukzessive die Werte einer Variablen elegant ermitteln, bei der jeder Wert sich aus einer Formel und dem Wert der vorigen Beobachtung derselben Variablen bildet?
d.h. wie würde es gehen, aus dem Datensatz mit den Spalten
a b c
d e .
g i .
..

folgenden Datensatz generieren (möglichst im data step und nicht als proc sql)?
a b c
d e (d*c+e)
g i (g*(d*c+e)+i)

Besten Dnak für Ihre Hilfe!
Dolores

Allerliebsten Dank, das funktioniert tatsächlich!!!

Allerliebsten Dank, das funktioniert tatsächlich!!!

Allerliebsten Dank, das funktioniert tatsächlich!!!

Allerliebsten Dank, das funktioniert tatsächlich!!!

LAG-Funktion

Hallo Dolores,

das geht mit der LAG-Funktion.

Data Test;
input a b c;
if _N_ > 1 then c = a * Lag1(c) + b;
cards;
1 2 3
4 5 .
6 7 .
run;

Schöne Grüße

Jan

Ich hatte diese Variante

Ich hatte diese Variante gestern auch schon ausprobiert. Wenn ich z.B. Ihr Programm laufen lasse, kommt als Ergebnis immer noch der Datensatz
1 2 3
4 5 .
6 7 .
raus, und keine über die Formel errechnete Werte für die Variable c. Wissen Sie vielleicht, woran dies liegen könnte? Vielen Dank für Ihre Unterstützung!

Mit Retain klappt es

Hallo Dolores,

ich hatte das Beispiel vorher nicht probiert. Es funktioniert tatsächlich nicht. Ich nehme an, der Wert für Lag(c) wird schon vorher geladen und die spätere Neuzuweisung an c wird nicht mehr berücksichtigt . Man muss es also anders machen.

Data Test;
keep a b c;
retain old_c;
input a b c;
If _N_ > 1 then c = a * old_c + b;
old_c = c;
cards;
1 2 3
4 5 .
6 7 .
run;

Dieses Beispiel habe ich getestet und es funktioniert auch.

Schöne Grüße

Jan