ich einen Datensatz bin mit der etwas ist wie:Füllen Sie die leeren Werte einer Variablen mit dem vorherigen nicht leeren Wert SAS 9.3
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| | female | 20 |
| age | 0-20 | 5 |
| | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
Und ich möchte die „leeren“ Zellen erfüllen die vorherige Verwendung nicht leere Zelle, um so etwas zu erhalten.
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| sexe | female | 20 |
| age | 0-20 | 5 |
| age | 20-40 | 5 |
| age | 40-60 | 10 |
| age | >60 | 10 |
+----------+--------+-------+
Ich habe versucht, verschiedene Möglichkeiten in DATA Schritt hauptsächlich mit der LAG() Funktion. Die Idee war, die vorherige Zeile zu lesen, wenn die Zelle leer war und damit zu füllen.
DATA test;
SET test;
IF variable = . THEN DO;
variable = LAG1(variable);
END;
RUN;
Und ich erhalten
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| | men | 10 |
| sexe | female | 20 |
| | 0-20 | 5 |
| age | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
Das Problem war die gute Saite nicht immer oben nur eine Zeile ist. Aber ich verstehe nicht, warum SAS in der ersten und dritten Zeile leer gemacht hat. Es musste diese Zeile nicht geändert werden, weil ich "If variable =." Sagte. Ich weiß, wie dies in Python oder in R mit einigen for-Schleife zu tun, aber ich habe keine gute Lösung in SAS gefunden.
Ich habe versucht, die Zeichenfolge in eine Variable mit "CALL SYMPUT" und auch mit "RETAIN" zu setzen, aber es hat auch nicht funktioniert.
Es muss einen einfachen und eleganten Weg geben, dies zu tun. Irgendeine Idee?
Nützliche Frage. Danke vielmals. – stan