2017-09-05 221 views
1

有條件的空值如何填寫擊落空值不同的組。 我的數據是這樣的:向下填充在SAS

id visit status var reason 
1 1  Done  x1 
1 1  Done  x2 
1 1  Done  x3 
1 2  Not Done x1 text1 
1 2  Not Done x2 
1 2  Not Done x3 
1 3  Done  x1 
1 3  Done  x2 
1 3  Done  x3 
2 1  Not Done x1 text2 
2 1  Not Done x2 
2 1  Not Done x3 
2 2  Done  x1 
2 2  Done  x2 
2 2  Done  x3 
2 3  Done  x1 
2 3  Done  x2 
2 3  Done  x3 

輸出應該是這樣的

id visit status var reason 
1 1  Done  x1 
1 1  Done  x2 
1 1  Done  x3 
1 2  Not Done x1 text1 
1 2  Not Done x2 text1 
1 2  Not Done x3 text1 
1 3  Done  x1 
1 3  Done  x2 
1 3  Done  x3 
2 1  Not Done x1 text2 
2 1  Not Done x2 text2 
2 1  Not Done x3 text2 
2 2  Done  x1 
2 2  Done  x2 
2 2  Done  x3 
2 3  Done  x1 
2 3  Done  x2 
2 3  Done  x3 

我覺得這是一個很簡單的問題,但現在,我一直沒能解決這個問題。任何幫助將不勝感激!

+1

嗯。從這個例子看來,你可以這樣做:if status ='Done'then reason ='text'。但是,如果類別具有單個文本實體,則似乎希望填充理由。如果是這樣,請列出你想要填寫的規則。 – pinegulf

+0

我修改了一下我的問題。所以我希望這個原因(沒有完成)與一次訪問的一個主題的所有變量相同。 – Laura

回答

1

這是一個簡單的任務,在使用by語句時,利用數據步驟中存在的first.variable功能。

基本上我已經創建每當遇到新的訪問分配原因的值的新變量。 retain語句確保爲ID和訪問不更改的所有後續行復制新變量值。然後我只刪除原來的Reason變量並重新命名新的變量。

data have; 
infile datalines dsd; 
input id visit status &$ var $ reason $; 
datalines; 
1, 1,  Done,  x1,, 
1, 1,  Done,  x2,, 
1, 1,  Done,  x3,, 
1, 2,  Not Done, x1, text1, 
1, 2,  Not Done, x2,, 
1, 2,  Not Done, x3,, 
1, 3,  Done,  x1,, 
1, 3,  Done,  x2,, 
1, 3,  Done,  x3,, 
2, 1,  Not Done, x1, text2, 
2, 1,  Not Done, x2,, 
2, 1,  Not Done, x3,, 
2, 2,  Done,  x1,, 
2, 2,  Done,  x2,, 
2, 2,  Done,  x3,, 
2, 3,  Done,  x1,, 
2, 3,  Done,  x2,, 
2, 3,  Done,  x3 
; 
run; 

data want; 
set have; 
retain reason_new; 
by id visit; 
if first.visit then reason_new=reason; 
drop reason; 
rename reason_new = reason; 
run;