2013-12-11 248 views
0

有人會確認COALESCE或COALESCEC功能是否適用於以下的正確命令?使用COALESCEC填充缺失值

我想從一個非缺失相應的觀察值到一個缺失觀察值的匹配值。

所以,如果數據是這樣的:

Order | ID 
apple  101xa 
orange 201xb 
cherry 301xc 
apple  . 

我將結束:

Taxo | Specialty2 
apple  101xa 
orange 201xb 
cherry 301xc 
apple  101xa 

感謝您的支持!

編輯:目前代碼used--

proc sort data=fill; 
    by taxo descending specialty2; 
run; 

data fill_input; 
    set fill; 
     retain tempspecialty2; 
     length tempspecialty2 $5; 
      by taxo; 
       if first.taxo then tempspecialty2=' '; 
       if not missing(specialty2) then tempspecialty2=specialty2; 
       else tempspecialty2=specialty2; 
run; 

proc freq data=fill_input; 
    table tempspecialty2; 
run; 

回答

2

數據階躍函數不太工作方式;越過行邊界需要您將值保存在臨時變量中。

你需要做的是按order排序。然後,您可以將ID的值保存在臨時保留變量中,並在需要時使用它。

proc sort data=have; 
by order; 
run; 

data want; 
set have; 
retain tempID; 
length tempID $5; 
by order; 
if first.order then tempID=' '; 
if not missing(id) then tempID=id; 
else id=tempID; 
run; 

如果你不能改變行的順序,那麼你就需要解決這個問題以不同的方式,使用哈希表或格式或類似的東西。

+0

我該如何控制以確保第一個「訂單」與缺少「ID」不符? 或者有沒有辦法創建一個新的變量,'ID'? – Jebediah15

+1

這取決於你的規則 - 即,如果你有多個,你怎麼知道哪一個是正確的?如果你不在乎,只想要任意的ID被填入,那麼按'order descending id'排序'',這會在底部放置缺失的ID。 – Joe

+0

謝謝喬!輸入已經被驗證,所以它真的是關注失蹤的。但是,我使用了,我認爲是適應的代碼,它似乎沒有糾正丟失的obs。任何見解? – Jebediah15