2014-02-10 2 views
-1

Я начинаю со списка переменных, на которые я бы хотел запустить регрессии. Затем я хотел бы сохранить их коэффициенты как скаляр с номером на конце. Например, вот мой код до сих порStata, называющий скаляры в цикле

local varlist="vertical reps"   
foreach variable of local varlist{ 
forval i=1/2{ 
quietly reg successorfail `variable' 
scalar s`i'=_b[`variable'] 
} 
} 

Когда я перечисляю результаты этого я просто получаю:

s2 = .00928925 
s1 = .00928925 

Так что создает новые скаляры только с последнего коэффициента регрессии он бежал.

Я хотел бы результат быть:

s1=first reg coefficient 
s2=2nd reg coefficient 

Спасибо!

ответ

2

Это работает:

clear all 
set more off 

sysuse auto 

local varlist mpg weight 
local i 0 

foreach variable of local varlist { 
     local ++i 
     quietly reg price `variable' 
     scalar s`i'=_b[`variable'] 
     display s`i' 
} 

Несколько вещей с вашим кодом:

  1. Там нет необходимости для второго цикла. Вы можете использовать локальный счетчик, если хотите добавить номер цикла к скалярному имени. Я использую локальный i и обновляю его (т. Е. Добавляю 1 к нему) с каждым прохождением через цикл. Что еще более важно, обратите внимание, что для каждой независимой переменной вы выполняете одну и ту же регрессию дважды (из-за forval i=1/2).

  2. Я не вижу, что вы пытаетесь использовать в линии local varlist = "vertical reps". Регрессоры, которые вы должны определить вне цикла, если это то, к чему вы стремитесь.

+0

отлично. Я не знал, что у Stata был такой местный счетчик. Я просто создавал локальный макрос моих переменных с локальной командой varlist, как и в вашем примере. СПАСИБО – Pcarlitz

2

Для справки, вот еще один способ сделать это.

clear all 
set more off 

sysuse auto 

local varlist "mpg weight" 
local nv : word count `varlist' 
tokenize "`varlist'" 

forval i = 1/`nv' { 
    quietly reg price ``i'' 
    scalar s`i'=_b[``i''] 
    display s`i' 
} 
+0

Спасибо. Я провел некоторое исследование команды «токенизация», и это разумный способ обойти это. – Pcarlitz

Смежные вопросы