我有如下的程序,我想把他写成一个循环语句,这样更简单
use x1
replace st_name = "ar" if ( n_th_row <= 480 )
forvalues i = 1971/2009 {
replace year = `i' if (ysupport >= 12 * (`i'-1970) + 1 & ysupport <= 12 * ((`i'- 1970 + 1 )))
}
save x.dta, replace
clear
use x2
replace st_name = "ne" if ( n_th_row <= 480 )
forvalues i = 1971/2009 {
replace year = `i' if (ysupport >= 12 * (`i'-1970) + 1 & ysupport <= 12 * ((`i'- 1970 + 1 )))
}
save y.dta, replace
clear
use x3
replace st_name = "ky" if ( n_th_row <= 480 )
forvalues i = 1971/2009 {
replace year = `i' if (ysupport >= 12 * (`i'-1970) + 1 & ysupport <= 12 * ((`i'- 1970 + 1 )))
}
save z.dta, replace
use x4
replace st_name = "wv" if ( n_th_row <= 480 )
forvalues i = 1971/2009 {
replace year = `i' if (ysupport >= 12 * (`i'-1970) + 1 & ysupport <= 12 * ((`i'- 1970 + 1 )))
}
save zz.dta, replace
我的循环语句是:
local s = 0
foreach v in ar ne ky wv {
local s = `s' + 1
use x`s'
replace st_name = "`v'" if (n_th_row <= 480)
forvalues i = 1971/2009 {
replace year = `i' if (ysupport >= 12 * ((`i'-1970) + 1) & ysupport <= 12 * ((`i'- 1970 + 1 )))
}
save x`s'.dta, replace
}
}
但是运行了半天,还是出不来结果啊。。。高手们可以帮我看一下么?
还有一个问题,我有如下的stata语句
gen mw_frst90_y_ky_1 = 3.35
gen mw_frst90_y_ky_3 = 3.61
gen mw_frst90_y_ky_5 = 9999
gen mw_frst90_y_ky_year_1 = 1990
gen mw_frst90_y_ky_year_2 = 1991
gen mw_frst90_y_ky_year_3 = 1991
gen mw_frst90_y_ky_year_4 = 1993
gen mw_frst90_y_ky_year_5 = 1993
gen mw_frst90_y_ky_year_6 = 2010
gen mw_frst90_y_ky_month_1 = 7
gen mw_frst90_y_ky_month_2 = 6
gen mw_frst90_y_ky_month_3 = 7
gen mw_frst90_y_ky_month_4 = 3
gen mw_frst90_y_ky_month_5 = 4
gen mw_frst90_y_ky_month_6 = 12
forvalues k = 1(2)5 {
local j = `k' + 1
replace mw_frst90_y = mw_frst90_y_ky_`k' if ((year >= mw_frst90_y_ky_year_`k') & (month >= mw_frst90_y_ky_month_`k')) & ((year <= mw_frst90_y_ky_year_`j') & (month <= mw_frst90_y_ky_month_`j')) & (st_id == 27)
}
这个语句的作用就是对mw_frst90_y这个变量产生一个step function(分段函数),比如gen mw_frst90_y_ky_1 = 3.35;gen mw_frst90_y_ky_year_1 = 1990 gen mw_frst90_y_ky_year_2 = 1991; gen mw_frst90_y_ky_month_1 = 7 gen mw_frst90_y_ky_month_2 = 6 这个语句意思就是mw_frst90_y在1990年7月到1991年6月的值是3.35. 现在的问题是如果用replace语句的话,最中间的那个 & 会导致符合这个条件的变量个数为0,因为month不可能又大于7又小于6,但是对于比如1990年1月到1992年4月,这个语句就没问题,现在的问题是,如何让这个语句也能适应那种第一个Month的值大于第二个Month的值呢?
非常感谢大家了