Извините, что заголовок сбивает с толку. Надеюсь, это будет ясно ниже.Stata - назначить разные переменные в зависимости от значения внутри переменной
Я использую Stata, и я хотел бы присвоить значение 1 переменной, которая зависит от значения в другой переменной. У меня есть 20 переменных порядка, а также 20 соответствующих переменных. Например, если order1 = 3, я бы хотел назначить variable3 = 1. Ниже приведен фрагмент того, как будет выглядеть конечный набор данных, если бы у меня было только 3 каждой переменной.
Прямо сейчас я делаю это с двумя петлями, но я должен другую петлю вокруг этого, что проходит через это более 9 раз плюс я делал это в течение файлов данных несколько сотен. Я бы хотел сделать его более эффективным.
forvalues i = 1/20 {
forvalues j = 1/20 {
replace variable`j' = 1 if order`i'==`j'
}
}
Можно ли использовать значение order'i»присвоить переменной [order`i'VALUE] напрямую? Тогда я могу избавиться от j цикла выше. Что-то вроде этого.
Благодарим за помощь!
***** ОБРАТНАЯ СВЯЗЬ добавлена 2 февраля. ** Я упростил свою проблему и набор данных слишком много, чтобы предлагаемые решения работали над тем, что я представил, но не добиваемся того, что я действительно пытаюсь сделать. Спасибо вам три за ваши решения. Я не был достаточно ясен в своем посте.
Чтобы уточнить, у моих данных нет взаимно-однозначного соответствия каждому порядку #, назначая переменную # a 1, если она отсутствует. Например, первое наблюдение для order1 = 3, variable1 не должно получать 1, переменная3 должна получить 1. Что я не включил в свой первоначальный пост, так это то, что я фактически проверяю другие условия, чтобы установить его равный 1.
Для получения дополнительной информации я подсчитываю рождение женщин по рождению (1-й ребенок, 2-й ребенок и т. д.), которые произошли в разное время матерей. Таким образом, в данных каждая строка - женщина, каждый заказ № - число рождений (order1 = 3, это ее третий ребенок). Соответствующей переменной # s являются подсчеты (переменная # означает, что у женщины есть ребенок порядка рождения №). Я упомянул в сообщении, что я делаю это 9 раз. Bc Я делаю это для 5-летних возрастных групп (15-19, 20-24 и т. Д.). Таким образом, первый набор переменных # был бы числом рождения по порядку, когда женщины были в возрасте 15-19 лет; второй набор переменных # был бы числом рождения по порядку, когда женщины были 20-24. и т. д. После этого я подытоживаю подсчеты по-разному (по образованию женщины, географии и т. д.).
Так с дополнительной петлей, что я делаю что-то больше, как это
forvalues k = 1/9{
forvalues i = 1/20 {
forvalues j = 1/20 {
replace variable`k'_`j' = 1 if order`i'==`j' & age`i'==`k' & birth_age`i'<36
}
}
}
Не уверен, если это возможно, но я хотел бы упростить, поэтому мне нужно только, чтобы перебрать каждый ребенок один раз, не езду на велосипеде через заказы на рождение и напрямую использовать значение в порядке #, чтобы присвоить 1 правильной переменной. Поэтому, если order1 = 3 и у женщины был ребенок в конкретной возрастной группе, назначьте переменную [agegroup] [3] = 1; если Заказ1 = 2, то переменная [возрастная группа] [2] должны получить 1.
forvalues k=1/9{
forvalues i = 1/20 {
replace variable`k'_[`order`i'value] = 1 if age`i'==`k' & birth_age`i'<36
}
}
Вы хотите только отметить (с 1 по) без отсутствующих наблюдений? –
Я хотел бы отметить все наблюдения с помощью 1 или 0. Все отсутствующие переменные порядка # получают 0 (я уже установил начальное значение переменных 0 в код, не показанный здесь). – Michelle
Спасибо, что поделились своими решениями! Наконец-то я получил возможность внимательно посмотреть на эти должности, и я слишком сильно упрочил свою проблему. Я добавил изменения в свой оригинальный пост, чтобы уточнить. – Michelle