你这里有几个问题。name
最重要的是,您的第一个循环是在x
整个循环中评估单词。所以它正在运行你的egen
命令:
foreach x of varlist name {
egen totalcapname = total(cap) if unit!=0 and name=="name", by(year)
}
我怀疑这是您真正想要的-我认为您希望它通过name
变量中的每个项目(观察)来评估,因为您使用了if
条件
name=="`x'"
所以,你需要
或者
- 设置一个本地宏并设置
egen
循环以评估name
变量中的每个项目。
我在您的代码中看到的第二个错误是您缺少x
循环中的前引号或左引号 - 它应该是
"`x'"`
不是
"x'"
这是我认为您要运行的示例。出于说明目的,我使用 Stata 内置的“auto.dta”数据集来运行您的循环和独立egen
语句...请注意,我将 auto.dta 中的变量重命名为您的变量名称:
***********
clear
sysuse auto
**
//this section renames the auto.dta variables to the name of your variables//
gen year = [_n]
rename mpg cap
rename price unit
rename make name
**NOTE: your "SOMENAME" will be "Subaru" in this example!**
**
//here's the loop you should be running//
foreach x of varlist name {
egen totalcap`x'=total(cap) if unit!=0 & name==`x', by(year)
}
//without the loop//
egen totalcapSOMENAME=total(cap) if unit!=0 & name=="Subaru", by(year)
//Display the results//
li name unit cap totalcap* if !missing(totalcapSOMENAME)
***********
尝试在 Stata do 文件中运行此示例。此外,当您遇到此类问题时(循环创建的结果与独立命令不同),请始终尝试输入set trace on
,以便您可以看到 Stata 如何评估您的循环。