Vorige Beobachtung
Verfasst von Dolores am 27 April, 2010 - 21:08
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
»
- Anmelden oder Registrieren um Kommentare zu schreiben

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.
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.
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