Stata 中的 while 循环

while loops in Stata

提问人:Bénédicte 提问时间:5/19/2022 最后编辑:Nick CoxBénédicte 更新时间:5/20/2022 访问量:151

问:

我正在尝试创建一些循环以避免有太多的行代码。 这是我当前的代码。有很多冗余,有什么方法可以用一个循环来写它吗?非常感谢!

replace WTP_ph = +87.5 if WTP_ph == -76
replace WTP_ph = +62.5 if WTP_ph == -50
replace WTP_ph = +37.5 if WTP_ph == -25
replace WTP_ph = +12.5 if WTP_ph == 0
replace WTP_ph = -12.5 if WTP_ph ==  +25
replace WTP_ph = -37.5 if WTP_ph ==  +50
replace WTP_ph = -62.5 if WTP_ph ==  +75
replace WTP_ph = -87.5 if WTP_ph ==  +76

replace WTP_pe = +87.5 if WTP_pe == -76
replace WTP_pe = +62.5 if WTP_pe == -50
replace WTP_pe = +37.5 if WTP_pe == -25
replace WTP_pe = +12.5 if WTP_pe == 0
replace WTP_pe = -12.5 if WTP_pe ==  +25
replace WTP_pe = -37.5 if WTP_pe ==  +50
replace WTP_pe = -62.5 if WTP_pe ==  +75
replace WTP_pe = -87.5 if WTP_pe ==  +76

replace WTP_pa = +87.5 if WTP_pa == -76
replace WTP_pa = +62.5 if WTP_pa == -50
replace WTP_pa = +37.5 if WTP_pa == -25
replace WTP_pa = +12.5 if WTP_pa == 0
replace WTP_pa = -12.5 if WTP_pa ==  +25
replace WTP_pa = -37.5 if WTP_pa ==  +50
replace WTP_pa = -62.5 if WTP_pa ==  +75
replace WTP_pa = -87.5 if WTP_pa ==  +76



loops foreach while-loop stata

评论


答:

1赞 Nick Cox 5/19/2022 #1

这是一个开始

foreach v in WTP_ph WTP_pe WTP_pa { 
    replace `v' = 87.5 if `v' == -76
    replace `v' = 62.5 if `v' == -50
    replace `v' = 37.5 if `v' == -25
    replace `v' = 12.5 if `v' == 0  
    replace `v' = -12.5 if `v' ==  25
    replace `v' = -37.5 if `v' ==  50
    replace `v' = -62.5 if `v' ==  75
    replace `v' = -87.5 if `v' ==  76
} 

然后我们注意到映射中的一种模式,只是最外层的语句不同,所以我们可以去

foreach v in WTP_ph WTP_pe WTP_pa { 
    replace `v' = 87.5 if `v' == -76
    replace `v' = 12.5 - `v' if inrange(`v', -50, 75)
    replace `v' = -87.5 if `v' == 76
}