2017-06-17 42 views
0

希望這是一個相當簡單的問題,不幸的是我還沒有能夠解決問題。我有幾個公司的數據集,其中包含一個變量,指示公司何時停止其活動。不幸的是,這個數據集每年都會更新,而不會調整前幾年,因此退出/停止的實際年份只會進入一次。以下表中的公司1爲例。該公司在2010年退出,但在2010年前的每一年都會有一個虛擬(「9999」)仍然活動的文字。對於公司1,我想用「2010」(即退出年份)替換此「9999」,而對於期末仍處於活動狀態的公司,例如公司3,留下「9999」。如何單獨保留每個觀察值的變量的最小值?

company   year  exit/stop year 
company 1  2007  9999 
company 1  2008  9999 
company 1  2009  9999 
company 1  2010  9999 
company 2  2007  9999 
compnay 2  2008  9999 
company 2  2009  2009 
company 3  2007  9999 
company 3  2008  9999 
company 3  2009  9999 
company 3  2010  9999 
company 4  2007  9999 
company 4  2008  2008 
...    ...  ... 

我試圖找到每個公司的最低值,並用最低值替換「退出/停止年」中的所有值,但到目前爲止它沒有正常工作,所以我想知道如果有人可能有一個想法如何做這個操作?

最好成績,

+0

是什麼公司1和公司3之間的區別?也許你打算在你的問題中談論公司2?那個在最後一個記錄上的出口值不是9999。 – Tom

+0

您是否想要更改所有記錄的EXIT值以獲取該公司最後一條記錄的值? – Tom

+0

對不便之處,但公司1是在2010年退出,所以它應該是2010年,而不是公司1的9999。我想結束一個數據集,其中公司1的所有退出值表示2010年,所有退出值對於公司4來說,2008年和公司2的所有退出價值應該是2009年。 – Mathilde

回答

0

你可以只取最後一個記錄,並把它合併到數據。或者更簡單的方法是將不是9999的記錄重新合併。

data have ; 
    input company &:$20. year exit ; 
cards; 
company 2 2007 9999 
company 2 2008 9999 
company 2 2009 2009 
company 3 2007 9999 
company 3 2008 9999 
company 3 2009 9999 
company 3 2010 9999 
company 4 2007 9999 
company 4 2008 2008 
; 
data want ; 
    merge have 
     have(keep=company exit rename=(exit=final) 
      where=(final ne 9999)) 
    ; 
    by company ; 
    exit = coalesce(final,exit); 
run; 

enter image description here