Я использую набор данные, который является чем-то вроде:Заполните пустые значения переменного с предыдущим, не пустым значением SAS 9,3
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| | female | 20 |
| age | 0-20 | 5 |
| | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
И я хотел бы выполнить «пустую» ячейку, используя предыдущий непустую ячейку, чтобы получить что-то вроде этого.
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| sexe | female | 20 |
| age | 0-20 | 5 |
| age | 20-40 | 5 |
| age | 40-60 | 10 |
| age | >60 | 10 |
+----------+--------+-------+
Я попробовал различные возможности в шаге DATA в основном с функцией LAG(). Идея состояла в том, чтобы прочитать предыдущую строку, когда ячейка была пустой и заполнить ее.
DATA test;
SET test;
IF variable = . THEN DO;
variable = LAG1(variable);
END;
RUN;
И я получил
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| | men | 10 |
| sexe | female | 20 |
| | 0-20 | 5 |
| age | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
Проблема была хорошая строка не всегда только одна строка верхней. Но я не понимаю, почему SAS пуст в первой и третьей строках. Он не должен был изменять эту строку, потому что я сказал «If variable =.». Я знаю, как это сделать на Python или в R с некоторыми циклами, но я не нашел хорошего решения в SAS.
Я попытался поместить строку внутри переменной с "CALL SYMPUT", а также с "", но это тоже не сработало.
Должен быть простой и элегантный способ сделать это. Есть идеи?
Полезный вопрос. Большое спасибо. – stan