0

应该是一个简单的问题。我有一个这样的数据集:

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 .

我怎样才能保留所有这些价值观?谢谢你的帮助。

4

2 回答 2

3

无需保留来自数据集的变量。添加一些技巧,它可能是这样的:

data check;
set check (rename=(mtna=orig_mtna));
retain mtna;
mtna=coalesce(orig_mtna, mtna);
drop orig_mtna;
run;
于 2013-11-09T11:03:57.557 回答
0

感谢您的关注。我通过一个简单的方法解决它。

data check; set check;
retain mtna_new mtna;
if mtna ne . then mtna_new=mtna;
run;
于 2013-11-09T07:32:12.467 回答