各位前辈,我有如下数据:
| 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、对于数据量特别特别特别大的时候,这个算不算相对“简单”的方法?是否有利于节约时间和硬盘空间?
谢谢!
我知道填充缺失值的方法肯定很多,欢迎大家都告诉我,但同时我更想知道这次错在哪里,谢谢!