SAS填充缺少的值
我有以下数据:SAS填充缺少的值,sas,retain,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
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 sort和retain,如何替换缺少的dur值?不使用合并,因为实际数据集非常大。您可以使用proc sort和retain(如您所说)来获得正确的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排序可能会非常慢。proc SQL方法可能更有用:
proc sql;
create table test2 as
select id, st, end, max(end-st) as dur
from test
group by id;
quit;