2016-11-12 282 views
0

考慮虛構數據來說明我的問題,其中實際上包含數千行。根據因子創建ID並用Stata填充

圖1

enter image description here

每個單獨的特徵在於,附連到A,B,C,d,E值。在圖1中,我展示了一些缺少某些特徵的個體。你有什麼想法,我怎樣才能得到以下完成的表格(圖2)?

圖2

enter image description here

與圖1中的ID我可以使用的carryforward命令中的值進行填充。但由於每個人都有不同數量的行,我不知道如何創建ID。

編輯:所有的人都分享特徵「A」。

編輯:現有的觀察順序是信息性的。

+0

謝謝@timat。我想過'fillin',我可能錯過了一些東西。但對於'fillin',你需要指定多個變量。所以,更準確地說,我不想創建具有所有char和values組合的缺失值的觀察值,我只想添加缺少的特徵以獲得每個ID 5行。 – emeryville

+0

我在這裏看不到一個確切的規格,確切地說我們可以做什麼,不能做什麼。看來現有的觀察順序(「行」不是標準的Stata術語)是信息性的,但這裏沒有指示標識符變量。 –

+0

感謝Nick的評論。這是正確的,現有的觀察順序是信息性的。一個天真的問題:是否有任何理由爲什麼Stata使用「觀察」而不是「行」?或者爲什麼不呢? – emeryville

回答

2

要檢測id的變化,我們的想法是比較每行中char的先例值是否大於=。

只有在您的數據已訂購時纔有效,但在數據中似乎是強制性的。

gen id= 1 if (char[_n-1] >= char[_n]) | _n ==1 
replace id = sum(id) if id==1 
replace id = id[_n-1] if missing(id) 
fillin id char 
drop _fillin 

如果一個人只爲特徵A和C和另一個人,因爲只有特性d和E,這是不行的,但它似乎是不可能與您的數據來檢測。

+0

Thanks @timat!這是一個非常好的和有效的解決方案。讓我補充一點,它也適用於我的一般問題,因爲所有個人至少共享特徵A. – emeryville

+1

另請參閱數據管理常見問題,例如http://www.stata.com/support/faqs/data-management/groups -by先發生/ –