Stata Loop 用于对三个单独的 dta 文件执行一系列操作
Stata Loop for a series of actions on three separate dta files
我正在尝试在 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
这应该满足您的要求:
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
}
请注意,如果紧跟在 \
之后,`
会被转义,因此您需要执行 \`
或 /`
。我在上面的代码示例中分别使用了其中一个。最佳做法是仅使用 /
,因为这会使此代码在 Linux 和 Mac 计算机上也成为 运行,但是您必须更新硬编码文件路径无论如何。
我正在尝试在 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
这应该满足您的要求:
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
}
请注意,如果紧跟在 \
之后,`
会被转义,因此您需要执行 \`
或 /`
。我在上面的代码示例中分别使用了其中一个。最佳做法是仅使用 /
,因为这会使此代码在 Linux 和 Mac 计算机上也成为 运行,但是您必须更新硬编码文件路径无论如何。