SAS填写缺失值

时间:2017-02-11 15:20:17

标签: 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”的缺失值? (不使用合并,因为真实数据集非常大)。

1 个答案:

答案 0 :(得分:1)

您可以使用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;