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 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 sort
可能会非常慢。 proc SQL
方法可能更有用:
proc sql;
create table test2 as
select id, st, end, max(end-st) as dur
from test
group by id;
quit;
我有以下数据:
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 sort
可能会非常慢。 proc SQL
方法可能更有用:
proc sql;
create table test2 as
select id, st, end, max(end-st) as dur
from test
group by id;
quit;