2015-12-02 67 views
1

我有以下數據結構。在每組內,一些觀察結果缺少value。我知道每個組只有一個非缺失值(組1的10和組2的11)。缺失觀測的位置在組內是隨機的(即,不能用前一個/後一個值填寫缺失值)。如何按組填寫缺失值?

如何用組中的一個非缺失值填充缺失值?

group value 
1  . 
1  10 
1  . 
2  11 
2  . 
2  11 

我目前的解決方案是一個循環,但我懷疑有一些聰明的bysort,我可以使用。

levelsof group, local(lm_group) 
foreach group in `lm_group' { 
    levelsof value if group == `group', local(lm_value) 
    replace value = `lm_value' if group == `group' 
} 

回答

1

如果您知道非缺失值是組內恆定的,那麼你可以得到有一個與

bysort group (value) : replace value = value[_n-1] if missing(value) 

爲遺漏值會先被排序在末尾,然後每個丟失值爲replace d以前的非缺失值。更換級聯向下,但只在每個組內。

有關文檔,看this FAQ

要檢查是否有每個組內最多一個獨特的非缺失值,你可以這樣做:

bysort group (value) : assert (value == value[1]) | missing(value) 

更多的個人筆記。我很高興看到levelsof正在使用,因爲我第一次寫它,但上面更好。

1

我認爲你正在尋找xfill命令。

要安裝xfill,下面複製粘貼到的Stata,並按照指示:

net from http://www.sealedenvelope.com/ 

之後,剩下的就是簡單:

xfill value, i(group) 

您可以閱讀上漲約xfillhere