2012-12-01 66 views
0

這可能是一個非常簡單的問題,但我無法弄清楚。我有數據,每行是一個人的獨特結果。數據集中的人員都有唯一的標識(唯一標識)。標識符使用日期

我想在新列中創建第二個(非唯一)標識符(日期標識),該列是人員在數據中出現的第一個日期。我想在Stata中這樣做,如果不可能,我猜Excel會好的。

比如我有:

Unique ID  Date Outcome 
    1   1/1/2000  A 
    2   2/11/2003 B 
    2   2/12/2003 B 
    2   3/6/2004  A 
    3   4/4/1997  A 
    3   8/11/2011 A 
    4   9/16/1995 B 
    4   9/17/1995 B 
    4   9/18/1995 C 
    4   9/19/1995 E 
    4   9/20/1995 A 
    4   2/17/1996 A 
    4   9/16/1996 A 
    4   9/17/1996 B 
    5   10/16/1995 C 
    5   10/17/2005 C 
    5   12/31/2008 A 

我想:

Unique ID  Date Outcome   Date ID 
    1   1/1/2000  A    1/1/2000 
    2   2/11/2003 B    2/11/2003 
    2   2/12/2003 B    2/11/2003 
    2   3/6/2004  A    2/11/2003 
    3   4/4/1997  A    4/4/1997 
    3   8/11/2011 A    4/4/1997 
    4   9/16/1995 B    9/16/1995 
    4   9/17/1995 B    9/16/1995 
    4   9/18/1995 C    9/16/1995 
    4   9/19/1995 E    9/16/1995 
    4   9/20/1995 A    9/16/1995 
    4   2/17/1996 A    9/16/1995 
    4   9/16/1996 A    9/16/1995 
    4   9/17/1996 B    9/16/1995 
    5   10/16/1995 C    10/16/1995 
    5   10/17/2005 C    10/16/1995 
    5   12/31/2008 A    10/16/1995 
+0

但如果兩個用戶有相同的日期,它不會工作,只是添加一些獨特的東西。 – Garry

+0

@Garry第二次使用單詞Unique是不準確的,這裏重複是OK。 – CJ12

回答

0

這可能不是最有效的方式,但我想通了:

首先,我創建了一個計數器,計算每個人在數據中的次數

sort unique_id 
by unique_id: gen individual_counter = _n 

然後我使用這個計數器來創建一個新的變量,這是個人在數據中的第一個日期,或者是一個缺失值'。'。

gen date_id = date if individual_counter == 1 

最後,我使用的替換功能,以來自上述替換缺失值(即,在第一天中列出)

replace date_id = date_id[_n-1] if date_id >= . 
2

更直接的一個行的解決方案是

bysort unique_id (date) : gen date_id = date[1] 

請注意,replace是一個命令,而不是一個函數。 search by以獲得對by:教程的參考。

+0

另請參見Stata常見問題解答http://www.stata.com/support/faqs/data-management/generating-last-date/(儘管標題是相關的,但它是相關的) –