应该是一个简单的问题。我有一个像这样的数据集:
id mtna
1 .
2 .
3 1.7
4 .
5 .
6 5.2
7 9.6
8 .
9 .
10 .
我想要这样的事情:
id mtna
1 .
2 .
3 1.7
4 1.7
5 1.7
6 5.2
7 9.6
8 9.6
9 9.6
10 9.6
基本上只有在缺失值时才保留过去的观察结果。 所以我尝试这样的事情:
data check; set check;
retain lag_mtna;
lag_mtna=lag1(mtna);
if mtna=. then mtna=lag_mtna;
run;
但后来结果是这样的:
id mtna
1 .
2 .
3 1.7
4 1.7
5 .
6 5.2
7 9.6
8 9.6
9 .
10 .
我如何保留所有这些价值观?谢谢你的帮助。
答案 0 :(得分:3)
无需保留来自数据集的变量。 添加一些技巧,可能是这样的:
data check;
set check (rename=(mtna=orig_mtna));
retain mtna;
mtna=coalesce(orig_mtna, mtna);
drop orig_mtna;
run;
答案 1 :(得分:0)
感谢您的关注。我通过一种简单的方式解决它。
data check; set check;
retain mtna_new mtna;
if mtna ne . then mtna_new=mtna;
run;