У вас есть пара вопросов здесь. Самое главное, что ваш первый цикл оценивает слово «name» вместо «x» во всем цикле. Так что ваша команда -egen- запускается как:
foreach x of varlist name {
egen totalcapname = total(cap) if unit!=0 and name=="name", by(year)
}
Я сомневаюсь, что это то, что вы действительно хотите - я думаю, что вы хотите, чтобы оно оценивалось по каждому элементу (наблюдению) в вашей переменной "name", так как вы использовали оператор if name == "x'". So, you need to either get rid of the double quotes around the "
x '" в вашем -if- оператор ИЛИ установить локальный макрос и настроить цикл egen для оценки каждого элемента в вашей переменной "name".
Вторая ошибка, которую я вижу в вашем коде, заключается в том, что вы пропускаете кавычку вперед или влево для «x» в цикле - он должен читать «x», а не «x».
Вот пример того, что, я думаю, вы хотите запустить. В целях иллюстрации я использую встроенный в Stata набор данных "auto.dta" для запуска вашего оператора loop & standalone -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)
***********
Попробуйте запустить этот пример в do-файле Stata. Кроме того, когда у вас возникают проблемы такого рода (когда цикл создает другой результат, чем автономная команда), всегда пытайтесь ввести -set trace on-, чтобы вы могли увидеть, как Stata оценивает ваш цикл.