SAS 填充缺失值

SAS fill missing values

我有以下数据:

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;