foreach i of numlist 2014 2016 2018 2020 {
preserve
keep if cyear == `i'
global xlist "allage degree marriage cfps_gender"
set seed 1000
gen tmp = runiform()
sort tmp
psmatch2 treat, outcome(Y) // 请将Y替换为您的实际结果变量
xlist, both graph
psgraph, bin(20)
**匹配质量
***匹配前
twoway (kdensity _pscore if treat == 1) ///
(kdensity _pscore if treat == 0)
**匹配后
twoway (kdensity _pscore if treat == 1) ///
(kdensity _pscore if (treat == 0 & _weight != .))
drop if _weight == .
save psm_`i', replace
restore
foreach i of numlist 2014 2016 2018 2020 {
preserve
keep if cyear == `i'
global xlist "allage degree marriage cfps_gender"
set seed 1000
gen tmp = runiform()
sort tmp
psmatch2 treat, outcome(Y) // 请将Y替换为您的实际结果变量
xlist, both graph
psgraph, bin(20)
**匹配质量
***匹配前
twoway (kdensity _pscore if treat == 1) ///
(kdensity _pscore if treat == 0)
**匹配后
twoway (kdensity _pscore if treat == 1) ///
(kdensity _pscore if (treat == 0 & _weight != .))
drop if _weight == .
save psm_`i', replace
restore
foreach i of numlist 2014 2016 2018 2020 {
preserve
keep if cyear == `i'
global xlist "allage degree marriage cfps_gender"
set seed 1000
gen tmp = runiform()
sort tmp
psmatch2 treat, outcome(Y) // 请将Y替换为您的实际结果变量
xlist, both graph
psgraph, bin(20)
**匹配质量
***匹配前
twoway (kdensity _pscore if treat == 1) ///
(kdensity _pscore if treat == 0)
**匹配后
twoway (kdensity _pscore if treat == 1) ///
(kdensity _pscore if (treat == 0 & _weight != .))
drop if _weight == .
save psm_`i', replace
restore
}
几个问题需要注意:
命令格式:forvalues的语法是forvalues i = min/max,但提供的值不是连续范围,而是一系列单独的年份。在这种情况下可用foreach而不是forvalues。
变量引用:循环内部需要使用宏引用来获取i的值,在变量名前加上反引号(`)和后引号(')实现,但代码里面已部分正确地用了这种格式。
括号和代码块:Stata代码块用大括号 {}定义。代码里面已包含了这些括号,但需要正确匹配。
命令分隔:Stata不同的命令用换行符或分号(;)分隔。
图形命令:tw 应该是 twoway 的简写,但要确保已安装了相应的图形包。
注释:在Stata中,注释以星号(*)开始。代码中包含了一些中文注释,不会造成语法错误,但确保它们不会干扰代码的执行。