各位前辈,我有如下数据:
| code | pricedate | pends | anndats | n |
4 | 104 | | | 16 |
4 | 103 | | | 15 |
4 | 102 | 1 | 102 | 14 |
2 | 107 | | | 13 |
2 | 106 | 2 | 106 | 12 |
2 | 105 | | | 11 |
2 | 104 | | | 10 |
2 | 103 | 1 | 103 | 9 |
2 | 102 | | | 8 |
2 | 101 | | | 7 |
1 | 107 | | | 6 |
1 | 105 | | | 5 |
1 | 104 | 2 | 104 | 4 |
1 | 103 | | | 3 |
1 | 102 | 1 | 102 | 2 |
1 | 101 | | | 1 |
我希望将anndats列的缺失值向下填充,就是针对同一个code,将前面一个有值的anndats填充到下面的缺失值中,直至遇到新的anndats为止(仅限同一code,顺序已用descending n排好),于是我写了如下程序:
/******************************/
data b;
set a;
if code=lag(code) and pends=. then anndats=lag(anndats);
run;
/******************************/
(剩下没能填充的不用管,因为我打算根据升序n反方向填充,但程序无实质差异。)
现在我的问题是:
1、为什么我的程序跑了数据完全没有任何变化?请问是哪里出错?
2、对于数据量特别特别特别大的时候,这个算不算相对“简单”的方法?是否有利于节约时间和硬盘空间?
谢谢!
我知道填充缺失值的方法肯定很多,欢迎大家都告诉我,但同时我更想知道这次错在哪里,谢谢!