For loop 如何使用循环在面板数据中插值

For loop 如何使用循环在面板数据中插值,for-loop,stata,For Loop,Stata,我有一个面板数据集。对于国家代码,我的变量标识符是cc;对于年份,我的变量标识符是Year: clear input long cc float(sch Year) 2 0 1960 2 0 1961 2 0 1962 2 0 1963 2 0 1964 2 0 1965 2 0 1966 2 0 1967 2 0 1968 2 0 19

我有一个面板数据集。对于国家代码,我的变量标识符是
cc
;对于年份,我的变量标识符是
Year

clear
input long cc float(sch Year)
2         0 1960
2         0 1961
2         0 1962
2         0 1963
2         0 1964
2         0 1965
2         0 1966
2         0 1967
2         0 1968
2         0 1969
2         0 1970
2         0 1971
2         0 1972
2         0 1973
2         0 1974
2         0 1975
2         0 1976
2         0 1977
2   .733902 1978
2     .7566 1979
2       .78 1980
2      .875 1981
2     .9225 1982
2 1.0174999 1983
2 1.0649999 1984
2      1.16 1985
2    1.2425 1986
2   1.28375 1987
2   1.36625 1988
2    1.4075 1989
2      1.49 1990
2    1.5825 1991
2   1.62875 1992
2   1.72125 1993
2    1.7675 1994
2      1.86 1995
2     1.935 1996
2    1.9725 1997
2 2.0475001 1998
2     2.085 1999
2      2.16 2000
2      2.27 2001
2     2.325 2002
2     2.435 2003
2      2.49 2004
2       2.6 2005
2    2.7575 2006
2   2.83625 2007
2   2.99375 2008
2    3.0725 2009
2      3.23 2010
2   3.15125 2011
2  3.190625 2012
2 3.1709375 2013
2 3.1807814 2014
2 3.1758595 2015
2 3.1783204 2016
2   3.17709 2017
2  3.177705 2018
4         0 1960
4         0 1961
4         0 1962
4         0 1963
4         0 1964
4         0 1965
4         0 1966
4         0 1967
4         0 1968
4         0 1969
4         0 1970
4         0 1971
4         0 1972
4         0 1973
4         0 1974
4         0 1975
4         0 1976
4         0 1977
4  4.657455 1978
4    4.8015 1979
4      4.95 1980
4       5.4 1981
4     5.625 1982
4     6.075 1983
4       6.3 1984
4      6.75 1985
4      7.02 1986
4     7.155 1987
4     7.425 1988
4      7.56 1989
4      7.83 1990
4    7.8275 1991
4   7.82625 1992
4   7.82375 1993
4    7.8225 1994
4      7.82 1995
4     8.195 1996
4    8.3825 1997
4    8.7575 1998
4     8.945 1999
4      9.32 2000
4  9.412499 2001
4   9.45875 2002
4   9.55125 2003
4    9.5975 2004
4      9.69 2005
4      9.73 2006
4      9.75 2007
4      9.79 2008
4      9.81 2009
4      9.85 2010
4      9.83 2011
4      9.84 2012
4     9.835 2013
4    9.8375 2014
4   9.83625 2015
4  9.836875 2016
4  9.836563 2017
4   9.83672 2018
end
我想为递减年份插入
sch
变量。变量
sch
在1979-2018年间有观察值。通过对
1978
的观察,我想对
1977
的值进行插值:

sch_1977 = 0.97 * sch_1978
我尝试过的代码如下:

forvalues y = 1977 1976 1975{
local i = `y' - 1958
bysort cc (Year): generate sch`y' = 0.97*sch[`i'] 
replace sch`y' = 0 if Year != `y'
replace sch = sch + sch`y'
}

这里的
i
对应于
1978年
为变量
cc
放置的行。通过使用
for values
循环,在每次迭代中,我希望创建一个新变量(
sch1977
sch1978
sch1979
),在相应年份内插观测值,并为所有其他观测值设置零。接下来,我想用
sch
来总结这个新变量。但是,Stata抱怨代码无效。

以下内容对我适用:

foreach x in 1977 1976 1975 {
    local i = (2018 - 1960) - (2018 - `x') + 2
    bysort cc (Year): generate sch_`x' = 0.97 * sch[`i'] 
    replace sch_`x' = 0 if Year != `x'
    replace sch = sch + sch_`x'
}
结果:

bysort cc (Year): list if inrange(Year, 1970, 1980), sepby(cc)


以下是我的作品:

foreach x in 1977 1976 1975 {
    local i = (2018 - 1960) - (2018 - `x') + 2
    bysort cc (Year): generate sch_`x' = 0.97 * sch[`i'] 
    replace sch_`x' = 0 if Year != `x'
    replace sch = sch + sch_`x'
}
结果:

bysort cc (Year): list if inrange(Year, 1970, 1980), sepby(cc)