0

我正在尝试在 Stata 中创建一个循环,以将一系列操作(包括合并、替换缺失值、替换日期变量、排序和保存)应用于 3 个不同的 dta 文件(menin.dta、Bmenin.dta 和非Bmenin.dta)。下面我复制了如何在没有循环的情况下完成这些任务,但为了简化它,我想弄清楚如何循环这段代码。

use "C:\Users\Desktop\menin.dta",clear
merge 1:1 bene_id using Controls,nogenerate
replace menin= 0 if menin ==.
replace date= refdate if menin ==0 
sort bene_id
save "C:\Users\Desktop\menin2.dta",replace

use "C:\Users\Desktop\Bmenin.dta",clear
merge 1:1 bene_id using Controls,nogenerate
replace Bmenin= 0 if Bmenin ==.
replace date= refdate if Bmenin ==0 
sort bene_id
save "C:\Users\Desktop\Bmenin2.dta",replace

use "C:\Users\Desktop\nonBmenin.dta",clear
merge 1:1 bene_id using Controls,nogenerate
replace nonBmenin= 0 if nonBmenin ==.
replace date= refdate if nonBmenin ==0 
sort bene_id
save "C:\Users\Desktop\nonBmenin2.dta", replace
4

1 回答 1

2

这应该满足您的要求:

foreach data_name in menin Bmenin nonBmenin {
    use "C:\Users\Desktop\\`data_name'.dta", clear
    merge 1:1 bene_id using Controls, nogenerate
    replace `data_name'= 0 if `data_name' == .
    replace date = refdate if `data_name' == 0 
    sort bene_id
    save "C:\Users\Desktop/`data_name'2.dta", replace
}

请注意,`如果紧跟在 a 之后,则 a 将被转义,\因此您需要执行\\`/`。我在上面的代码示例中使用了其中的一个。最佳做法是仅使用/它会使此代码也可以在 Linux 和 Mac 计算机上运行,​​但无论如何您都必须更新硬编码文件路径。

于 2021-09-09T20:36:37.300 回答