2017-02-11 205 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」的缺失值給:

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

您可以使用proc sortretain正如你所說的,實現了對杜爾列,但它不會給你相同的結構,你的榜樣輸出:

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;