SAS 填充缺失值

  • 本文关键字:填充 SAS sas retain
  • 更新时间 :
  • 英文 :


我有以下数据:

data test ;
INPUT id st end ;
datalines ;
1 17 .
1 17 .
1 17 17.5
1 17 .
1 17 .
2 15 .
2 15 .
2 15 .
2 15 .
2 15 15.75
run ;
data test2 ;
set test ;
dur = end - st ;
run ;

我想用"id"填写"dur"的缺失值,给出:

id   st   end   dur
1    17    .    17.5
1    17    .    17.5
1    17   17.5  17.5
1    17    .    17.5
2    15    .    15.75
2    15    .    15.75
2    15    .    15.75
2    15    .    15.75
2    15   15.75 15.75

由于行不按任何顺序使用proc sortretain,如何替换"dur"的缺失值?(不使用合并,因为实际数据集非常大(。

您可以

按照自己所说的使用 proc sortretain 来实现正确的 dur 列,但它不会为您提供与示例输出相同的结构:

proc sort data = test;
  by id descending end;
run;
data test2 ;
  set test ;
  by id;
  retain dur;
  if first.id then dur = end - st ;
run;

然后test2看起来像:

id  st  end     dur
1   17  17.5    0.5 
1   17  .       0.5 
1   17  .       0.5 
1   17  .       0.5 
1   17  .       0.5 
2   15  15.75   0.75    
2   15  .       0.75    
2   15  .       0.75    
2   15  .       0.75    
2   15  .       0.75    

但是,如果数据变得太大,proc sort可能会非常慢。proc SQL方法可能更有用:

proc sql;
  create table test2 as
  select id, st, end, max(end-st) as dur
  from test
  group by id;
quit;

最新更新