全部版块 我的主页
论坛 站务区 十一区 新手入门区
832 1
2024-01-05
做stata循环语句出现invalid syntax,forvalues i = 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 $xlist , n(3)  out(p601)  logit ate
pstest $xlist ,both graph
psgraph,bin(20)
**匹配质量
***匹配前
tw(kdensity _pscore if treat == 1)///
(kdensity _pscore if treat== 0)
**匹配后
tw (kdensity _pscore if treat== 1) ///
(kdensity _pscore if (treat==0 & _weight != . ))
drop if _weight == .
save psm_`i',replace

restore
}



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-1-5 13:21:13
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中,注释以星号(*)开始。代码中包含了一些中文注释,不会造成语法错误,但确保它们不会干扰代码的执行。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群