私は次のようなデータセットを使用しています:
+----------+--------+-------+
| 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 |
+----------+--------+-------+
主にLAG()関数を使用して、DATAステップでさまざまな可能性を試しました。アイデアは、セルが空のときに前の行を読み取り、それを埋めることでした。
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 |
+----------+--------+-------+
問題は、良い弦が常に 1 列上にあるとは限らないことでした。しかし、SAS が 1 行目と 3 行目に空白を入れた理由がわかりません。「If variable = .」と言ったので、この行を変更する必要はありませんでした。Python または R で for ループを使用してこれを行う方法は知っていますが、SAS では適切な解決策が見つかりませんでした。
「 CALL SYMPUT」と「 RETAIN 」を使用して変数内に文字列を入れようとしましたが、うまくいきませんでした。
これを行うには、シンプルでエレガントな方法が必要です。何か案が?