Я хочу, чтобы заменить этот код с петлей:значения с помощью цикла Stata последовательно
replace var1=1 if year > 1996 & st==5
replace var1=0 if year < 1996 & st==5
replace var1=1 if year > 1998 & st==6
replace var1=0 if year < 1998 & st==6
Мои данные выглядит следующим образом
st year var
5 1993
5 1996
5 1992
6 1991
6 1999`
Я написал цикл, как этот
foreach st in 5 6}
foreach yr in 1996 1998 }
replace var1=1 if year>`yr' & state==`st'
replace var1=0 if year<`yr' & state==`st'
}
}
Однако этот цикл не дает результатов, аналогичных ручному методу. Я знаю, что делаю глупую ошибку.
EDIT:
Для дальнейшего уточнения моего фактического кода, который я написал (без петель) выглядит, как показано ниже. Я хотел бы использовать цикл или другой более простой способ, чтобы прийти к тем же результатам:
gen policy=.
replace policy=1 if year>1996 & fipscode==5
replace policy=0 if year <1997 & fipscode==5
replace policy=1 if year>1995 & fipscode==6
replace policy=0 if year <1996 & fipscode==6
replace policy=1 if year>1997 & fipscode==9
replace policy=0 if year <1998 & fipscode==9
replace policy=1 if year>1997 & fipscode==15
replace policy=0 if year <1998 & fipscode==15
replace policy=1 if year>1992 & fipscode==16
replace policy=0 if year <1993 & fipscode==16
replace policy=1 if year>1996 & fipscode==31
replace policy=0 if year <1997 & fipscode==31
replace policy=1 if year>1997 & fipscode==32
replace policy=0 if year <1998 & fipscode==32
replace policy=1 if year>1996 & fipscode==39
replace policy=0 if year <1997 & fipscode==39
replace policy=1 if year>1997 & fipscode==40
replace policy=0 if year <1998 & fipscode==40
replace policy=1 if year>1992 & fipscode==54
replace policy=0 if year <1993 & fipscode==54
Я исправил тривиальный промах, запутывающий 6 и 7. Я оставил основной сегмент кода в вашем вопросе точно так же, как и в сообщении. Обратите внимание, что вам нужно оставить скобку '{' в начале каждого цикла, а не в правой скобе '}'. –
К сожалению, трудно понять, что этот вопрос может помочь кому угодно, кроме оригинального плаката. Это объясняет мой нижний план. –
Дополнительный пример (после EDIT :) еще труднее работать. Лучше всего просто работать в обратном направлении: какие условия должны быть закодированы 1, а какие закодированы 0? Обычно существует довольно простой способ кодирования переменных. Условие в 'fipscode' сводится к' if inlist (fipscode, 5,6,9,15,16,31,32,39,40,54) ', хотя существует ограничение на количество аргументов, которые будут выполняться функцией , за исключением того, что, по-видимому, существуют разные определения для разных лет. Иногда сложный набор определений просто означает сложный код. –