在Stata

时间:2015-11-19 18:54:36

标签: stata

所以,我的数据集中有一堆变量是二进制的,包含个人是否结婚的信息。因此,例如,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;
};

1 个答案:

答案 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

但如上所述,通过可重复的示例,一个具体的解决方案会更容易。