如何一次对两个变量使用foreach循环?

How to use foreach loop over two variables at once?

我想使用 foreach 循环同时对两个变量列表执行命令。我的问题最好用一个例子来解释:

示例: 在我的循环中,我想引用给定年份 两年前的变量。例如,在循环的第一次迭代中,我希望引用给定年份 (2000) 和该年份之前两年 (1998) 的变量。在下一次迭代中,我想引用下一年 (2002) 和两年前 (2000) 的变量。这是一些示例代码:

foreach y in 2000 2002 2004 2006 {
    gen employment`y' = 0
    replace employment`y' = . if work_1998==. | work_`y'==.
    replace employment`y' = 1 if work_1998==1 & work_`y'==1
}

此代码适用于 2000 年,我需要调用 2000 年和 1998 年(2000 年之前的两年)的变量。但是对于 2002 年、2004 年等,我需要将上面代码中的 1998 替换为基本上自动调用“两年前”的内容,而不仅仅是使用数字“1998”。我不知道该怎么做。任何建议表示赞赏!

还是一个循环:

foreach y in 2000 2002 2004 2006 {
    local Y = `y' - 2 
    gen employment`y' = 0
    replace employment`y' = . if work_`Y' ==. | work_`y'==.
    replace employment`y' = 1 if work_`Y' ==1 & work_`y'==1
}

也就是说,应用 reshape long 可能会更好,这样不同年份的数据将保存在不同的观测值中,而不是不同的变量中。

您对新变量的计算可以简化为

gen employment`y' = work_`Y' ==1 & work_`y'==1 if !missing(work_`y', work_`Y')