【发布时间】:2021-06-14 20:31:52
【问题描述】:
我正在尝试运行 for 循环以在 Stata 中制作余额表(将我的数据集的人口统计数据与国家级统计数据进行比较)
为此,我正在准备我的数据集并尝试计算一些关键人口统计数据的百分比/平均值。
preserve
rename unearnedinc_wins95 unearninc_wins95
foreach var of varlist fem age nonwhite hhsize parent employed savings_wins95 debt_wins95 earnedinc_wins95 unearninc_wins95 underfpl2019 { //continuous or binary; to put categorical vars use kwallis test
dis "for variable `var':"
tabstat `var'
summ `var'
local `var'_samplemean=r(mean)
}
clear
set obs 11
gen var=""
gen sample=.
gen F=.
gen pvalue=.
replace var="% Female" if _n==1
replace var="Age" if _n==2
replace var="% Non-white" if _n==3
replace var="HH size" if _n==4
replace var="% Parent" if _n==5
replace var="% Employed" if _n==6
replace var="Savings stock ($)" if _n==7
replace var="Debt stock ($)" if _n==8
replace var="Earned income last mo. ($)" if _n==9
replace var="Unearned income last mo. ($)" if _n==10
replace var="% Under FPL 2019" if _n==11
foreach col of varlist sample {
replace `col'=100*round(`fem_`col'mean', 0.01) if _n==1
replace `col'=round(`age_`col'mean') if _n==2
replace `col'=100*round(`nonwhite_`col'mean', 0.01) if _n==3
replace `col'=round(`hhsize_`col'mean', 0.1) if _n==4
replace `col'=100*round(`parent_`col'mean', 0.01) if _n==5
replace `col'=100*round(`employed_`col'mean', 0.01) if _n==6
replace `col'=round(`savings_wins95_`col'mean') if _n==7
replace `col'=round(`debt_wins95_`col'mean') if _n==8
replace `col'=round(`earnedinc_wins95_`col'mean') if _n==9
replace `col'=round(`unearninc_wins95_`col'mean') if _n==10
replace `col'=100*round(`underfpl2019_`col'mean', 0.01) if _n==11
}
我正在尝试运行以下循环,但在循环的后半部分,我不断收到“无效语法”错误。对于上下文,在循环的前半部分(清除数据集之前),代码将变量的平均值存储为宏(`var'_samplemean)。有人可以帮我解决这个循环吗?
我的样本数据:
clear
input byte fem float(age nonwhite) byte(hhsize parent) float employed double(savings_wins95 debt_wins95 earnedinc_wins95 unearninc_wins95) float underfpl2019
1 35 1 6 1 1 0 2500 0 0 0
0 40 0 4 1 1 0 10000 1043 0 0
0 40 0 4 1 1 0 20000 2400 0 0
0 40 0 4 1 1 .24 20000 2000 0 0
0 40 0 4 1 1 10 . 2600 0 0
谢谢!
【问题讨论】:
-
如果没有可重现的例子,很难说。您可以使用
dataex创建一些我们可以重现错误的示例数据吗? (请参阅此页面上的dataex:stackoverflow.com/tags/stata/info)。或者您可以运行set trace on并再次运行您的代码并编辑您的问题以包含您在错误之前获得的几行输出吗? -
嗨,编辑了问题以包含数据!
-
如果您先运行
input部分,然后运行示例中的其余代码,则没有错误(只要您注释掉rename unearnedinc_wins95 unearninc_wins95)。它可能不是您期望的输出,但没有错误。请确保您提供的代码在独立运行时确实会产生错误 -
限定符
if _n==1。if _n==2等可以替换成in 1、in 2等,这样更快也更容易打字。 -
如果@C.Robin 能满意地回答您的问题,请接受。
标签: for-loop stata stata-macros