2015-11-22 2 views
0

Coding в Stata:Заполнение пропущенных значений

В моем несбалансированном еженедельном наборе данных панели, которая охватывает 5 лет, я стремлюсь:

  1. Заполните недели, которые пропускаются. Для этого я использую команду tsfill.
  2. Тем не менее, я не хочу заполнять недели, если недели не хватает более 5 недель подряд. То есть, если недели не хватает в течение 5 недель или меньше, мы продолжаем и генерируем те недостающие недели с нулевыми значениями; но если недели не хватает более 5 недель, просто игнорируйте их.

Второй шаг представляет собой вызов для меня. Какие-либо предложения?

образец оригинала:

id week var1 var2 var3 
1 1 0 3 0 
1 3 1 0 0 
1 5 1 0 0 
1 20 0 4 0 

образец желаемого:

id week var1 var2 var3 
1 1 0 3 0 
1 2 0 0 0 (new row!) 
1 3 1 0 0 
1 4 0 0 0 (new row!) 
1 5 1 0 0 
1 20 0 4 0 
+0

Насколько ginormous является вашим набором данных? Могу ли вы справиться с полным заполнением, а затем сбросить строки, которые вам не нужны? –

+0

Почти 300 000 об. Я не думаю, что это возможно. – Olga

+0

Один из подходов может заключаться в следующем: (1) Использовать tsfill, чтобы заполнить все, а затем (2) gen DROPME = 1 (3) итерации через id, время и установить DROPME = 0, если в пределах расстояния 5 расстояний есть не пропущенное наблюдение , (4) Бросьте каждый ряд с dropme = 1. –

ответ

1

Я думаю, я нашел ответ.

iri_key week units 
1 1 2 
1 3 3 
1 4 5 
1 6 7 
1 15 2 
2 1 5 
2 2 7 
2 3 3 
2 4 6 
2 6 4 


tsset iri_key week 
tsfill, full 
replace units=0 if units==. 
gen check=0 
replace check=1 if units==0 
tsspell, cond(check==1) 
drop if _seq>5 
+0

Как я понимаю, вам не нужна первая переменная 'replace' или' check', так как 'tsspell, cond (units ==.)' Должен работать напрямую. 'tsspell' из SSC и должен быть установлен, прежде чем вы сможете его использовать. –

Смежные вопросы