Генерация переменных с циклом while для имен переменных - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь выполнить следующую операцию:

local i=2
while `i'<10 {
gen diff0`i' = f1ysveny0`i'-sveny0`i-1'
local i=`i'+1
}

Однако, похоже, это не работает:

`i'-1 

Как мне написать предложение, чтобы сделать сwhile цикл примерно такой:

gen diff08=f1ysveny08-sveny07
gen diff09=f1ysveny09-sveny08

1 Ответ

0 голосов
/ 26 февраля 2019

Не используйте while.Вместо этого используйте forvalues:

forvalues i = 2/9 { 
    generate diff0`i' = f1ysveny0`i' - sveny0`=`i'-1'
}

Ваша ошибка заключается в том, что

`i-1' 

эквивалентно

`=`i'-1' 

, но это не так.В вашем коде Stata просто видит в качестве макроса ссылку i-1, но знаки минус не могут быть частью имен Stata.Конечно, целое не является выражением, так как вам нужен второй синтаксис: во-первых, для ссылки на локальный макрос i;затем вычесть 1;и наконец, чтобы Stata использовал результат выражения.

Ошибка вашего кода сама по себе не была фатальной, поскольку ссылки на макросы, которые не имеют смысла, оцениваются как пустые строки.Но (я полагаю) вы в итоге ссылались на имя переменной, отсутствующее в вашем наборе данных, так как sveny0 не упоминается в вашем коде.

Начинающим часто бывает проще:

forvalues i = 2/9 { 
    local j = `i' - 1 
    generate diff0`i' = f1ysveny0`i' - sveny0`j'
}
...