Używam zestawu danych, który jest czymś w rodzaju:Wypełnij puste wartości zmiennej z poprzedniego braku wartości pustej SAS 9,3
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| | female | 20 |
| age | 0-20 | 5 |
| | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
I chciałbym, aby spełnić „puste” komórki przy użyciu poprzedniego niepustą komórkę, aby uzyskać coś takiego.
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| sexe | female | 20 |
| age | 0-20 | 5 |
| age | 20-40 | 5 |
| age | 40-60 | 10 |
| age | >60 | 10 |
+----------+--------+-------+
Próbowałem różnych możliwości w kroku danych głównie za pomocą funkcji LAG(). Chodziło o to, aby przeczytać poprzedni wiersz, gdy komórka była pusta i wypełnić ją.
DATA test;
SET test;
IF variable = . THEN DO;
variable = LAG1(variable);
END;
RUN;
I uzyskano
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| | men | 10 |
| sexe | female | 20 |
| | 0-20 | 5 |
| age | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
Problem był dobry ciąg nie zawsze jest tylko jeden wiersz górny. Ale nie rozumiem, dlaczego SAS włożył puste w pierwszej i 3d linii. Nie musiałem modyfikować tej linii, ponieważ powiedziałem "If variable =.". Wiem, jak to zrobić w Pythonie lub w R z niektórymi pętlami, ale nie znalazłem dobrego rozwiązania w SAS.
Próbowałem umieścić ciąg wewnątrz zmiennej z "CALL SYMPUT", a także z "RETAIN", ale to też nie działało.
Musi to być prosty i elegancki sposób, aby to zrobić. Dowolny pomysł?
Przydatne pytanie. Wielkie dzięki. – stan