2017-02-11 3 views
0

У меня есть следующие данные:SAS заливка недостающие значения

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 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»? (Без использования слияния, поскольку реальный набор данных чрезвычайно велик).

ответ

1

Вы можете использовать proc sort и retain, как вы говорите, чтобы достичь правой колонке Дур, однако это не дает вам такую ​​же структуру, как ваш пример выхода:

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 может быть довольно медленным, если ваши данные становятся слишком большими. A proc SQL может быть более полезным:

proc sql; 
    create table test2 as 
    select id, st, end, max(end-st) as dur 
    from test 
    group by id; 
quit; 
Смежные вопросы