所以,我的数据集中有一堆变量是二进制的,包含个人是否结婚的信息。因此,例如,marr79
,是一个人是否在1979年结婚。
我试图找出一个人从孩子出生时结婚多少年(第一次)。因此,如果这个孩子出生于1980年,并且这个人在1980年结婚,那么它会增加child_marr
,并且在接下来的18年里也会这样做。但是,如果它遇到0,我希望它停止。所以,如果1980年,1981年和1982年有1,1983年为0,我希望它在1983年停止,即使1984年有1。
我的代码如下(这是我尝试过的众多迭代中的一个)要么让它在不停止的情况下运行多年,要么从不运行,保留所有0的值。
感谢任何帮助。
gen child_marr=0;
forvalues y=79(1)99 {;
gen temp_yr=1900+`y';
if (ch_yob<=temp_yr & marr`y'==1 & temp_yr<(ch_yob+18))==1 {;
replace child_marr = child_marr + 1;
};
else if (marr`y'==0 & ch_yob<=temp_yr) {;
continue, break;
};
drop temp_yr;
};
答案 0 :(得分:1)
一些评论:
if (test1 & test2 & test3) == 1
不需要== 1
部分 - Stata推断if (condition)
表示if condition == 1
(警告:对于逻辑测试为{{1}的情况})。{0,1}
的值与变量temp_yr
的值)。这似乎是正确的,但通常会有问题 - 请参阅Stata FAQ: if command versus if qualifier。 解决方案的第一步是重新编码ch_yob
循环以使用 forvalues
限定符而不是 if
命令:
if
但如上所述,通过可重复的示例,一个具体的解决方案会更容易。