Stata: объединить foreach с by

В моих данных отсутствуют некоторые значения для переменной issue. Я пытаюсь указать самое последнее прошедшее значение issue (для этого субъекта, идентифицированного id1 и id2), если таковое имеется. Если все прошлые значения issue отсутствуют, я хочу, чтобы код оставил текущее значение отсутствующим.

Я попробовал приведенный ниже код, но Стата говорит, что foreach нельзя сочетать с by.

bys id1 id2 (date): foreach v in 1(1)_n {
replace issue[n] = issue[n-v] if !missing(issue[n-v]) and missing(issue[n])==1
}

Есть ли способ сделать это без использования foreach с by?


person Anshu says Reinstate Monica    schedule 23.06.2016    source источник
comment
Обратитесь к stackoverflow. com/questions/37976385/ перед началом новой темы.   -  person Nick Cox    schedule 23.06.2016
comment
Извиняюсь, давно меня здесь не было. Должен ли я прокомментировать, что вопрос был решен, или удалить вопрос, или написать ответ, включающий ваше решение (очень признателен)?   -  person Anshu says Reinstate Monica    schedule 23.06.2016
comment
Все, что вам нужно сделать, это указать, что работает (или не работает).   -  person Nick Cox    schedule 23.06.2016


Ответы (1)


Попытка зациклиться на наблюдениях совершенно не нужна, так как Stata делает это в любом случае.

Если вы хотите использовать только самое последнее неотсутствующее значение, вероятно, вам нужно следующее:

clonevar issue, generate(clone) 
bys id1 id2 (date): replace issue = clone[n-1] if missing(issue) 

Обратите внимание на следующие ошибки в вашем коде, кроме тех, которые вы отмечаете:

foreach v in 1(1)_n: foreach не будет расширять numlist с in; он также не будет оценивать _n для вас.

replace issue[n]: индексы в этой позиции запрещены; replace issue в любом случае означает одно и то же.

issue[n-v]: вам понадобится местная ссылка.

and не является ключевым словом: вам нужно &, если вы хотите логическое "и"

n предположительно является опечаткой для _n

См. также этот Часто задаваемые вопросы о замене отсутствующих значений.

person Nick Cox    schedule 23.06.2016
comment
Спасибо за ответ, а также отзыв о коде. Будет ли это заменено самым последним неотсутствующим значением? Кажется, что clone[n-1] принимает самое последнее значение независимо от того, отсутствует ли оно. - person Anshu says Reinstate Monica; 23.06.2016
comment
См. квалификацию, отмеченную выше жирным шрифтом в моем ответе. Если можно использовать последнее предыдущее неотсутствующее значение, независимо от того, когда оно было, упомянутый FAQ дает подробное обсуждение. - person Nick Cox; 23.06.2016
comment
Кроме того, замена отсутствующих на отсутствующие не будет потерей. - person Nick Cox; 23.06.2016
comment
Хорошо, спасибо. FAQ очень помог, как и ваше объяснение. Поскольку я хочу использовать последнее предыдущее неотсутствующее значение, я использовал bys id1 id2 (date): replace issue = issue[n-1] if missing(issue) в соответствии с часто задаваемыми вопросами. - person Anshu says Reinstate Monica; 23.06.2016