Tôi đang sử dụng một tập dữ liệu đó là một cái gì đó như:Điền các giá trị trống của một biến với giá trị trước đó không trống SAS 9,3
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| | female | 20 |
| age | 0-20 | 5 |
| | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
Và tôi muốn hoàn thành các tế bào "trống" bằng cách sử dụng trước ô không trống để có được một cái gì đó như thế này.
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| sexe | men | 10 |
| sexe | female | 20 |
| age | 0-20 | 5 |
| age | 20-40 | 5 |
| age | 40-60 | 10 |
| age | >60 | 10 |
+----------+--------+-------+
Tôi đã thử nhiều khả năng trong bước DATA chủ yếu với chức năng LAG(). Ý tưởng là đọc hàng trước đó khi ô trống và điền vào đó.
DATA test;
SET test;
IF variable = . THEN DO;
variable = LAG1(variable);
END;
RUN;
Và tôi đắc
+----------+--------+-------+
| Variable | Level | Value |
+----------+--------+-------+
| | men | 10 |
| sexe | female | 20 |
| | 0-20 | 5 |
| age | 20-40 | 5 |
| | 40-60 | 10 |
| | >60 | 10 |
+----------+--------+-------+
Vấn đề là chuỗi tốt không phải lúc nào cũng chỉ là một hàng trên. Nhưng tôi không hiểu tại sao SAS lại để trống ở hàng đầu tiên và 3d. Nó không phải sửa đổi dòng này bởi vì tôi đã nói "Nếu biến =.". Tôi biết làm thế nào để làm điều này trong Python hoặc trong R với một số cho vòng lặp nhưng tôi đã không tìm thấy giải pháp tốt trong SAS.
Tôi đã cố gắng để đặt chuỗi bên trong một biến với "CALL SYMPUT" và cũng với "RETAIN" nhưng nó cũng không hoạt động.
Phải có cách đơn giản và thanh lịch để thực hiện việc này. Bất kỳ ý tưởng?
Câu hỏi hữu ích. Cảm ơn rất nhiều. – stan