2015-12-07 4 views
-1

У меня есть 133 переменных дохода (каждая переменная представляет собой группу). Я хочу коэффициенты Джини всех этих групп, поэтому я использую ineqdeco в Stata. Я не могу вычислить все эти коэффициенты вручную, поэтому я создал цикл:Stata: для цикла для хранения значений коэффициента Джини

gen sgini = . 
foreach var of varlist C07-V14 { 
forvalue i=1/133 { 
ineqdeco `var' 
replace sgini[i] = $S_gini 
} 
} 

пытался также изменить порядок:

foreach var of varlist C07-V14 { 
ineqdeco `var' 
forvalue i=1/133 { 
replace sgini[i] = $S_gini 
    } 
} 

И указав i заранее:

gen i = 1 
foreach var of varlist C07-V14 { 
    ineqdeco `var' 
    replace sgini[i] = $S_gini 
    replace i = i+1 
    } 
    } 

I не знаю, работает ли этот последний метод. Во всех случаях я получаю сообщение об ошибке: weight not allowed r(101). Я не знаю, что это значит или что делать. В принципе, я хочу вычислить коэффициент Джини для всех 133 переменных и сохранить эти значения в векторе длиной 133, поэтому единственная переменная со всеми сохраненными в ней коэффициентами.

Редактировать: Я обнаружил, что ошибка связана с командой replace. Я заменил эту строку:

replace sgini = $S_gini in `i' 

Но теперь это не «петли», так что я получаю первое значение во всех записях sgini.

+0

В каком примере вы использовали пересмотренную команду замены? Я думаю, что первые два примера имеют другие проблемы, кроме команды replace. –

+0

Я использовал их в первом и втором примерах. Как вы думаете, что в этом плохого? Потому что я думаю, что это не так в varlist, потому что он вычисляет Gini первой переменной, и это 133 раза, и сохраняет это в моей переменной. Итак, я думаю, что «я» прав? Но третий пример не отличается при рассмотрении varlist .. –

ответ

0

Нет очевидной причины для вашей внутренней петли. Если у вас нет больше переменных, чем наблюдения, то это может работать:

gen sgini = . 
gen varname = "" 
local i = 1 
foreach var of varlist C07-V14 { 
    ineqdeco `var' 
    replace sgini = $S_gini in `i' 
    replace varname = "`var'" in `i' 
    local i = `i' + 1 
} 

Проблем очевидны в коде (кажется,) включает в себя:

  1. Путаница между переменными и локальными макросами. Если у вас есть большой опыт работы с другими языками, трудно разбить старые умственные привычки. (Mata больше похожа на другие языки здесь.)

  2. Не осознавая, что цикл наблюдений является автоматическим. Или, возможно, не видя, что здесь нужен только один цикл, трюк - это то, что цикл над переменными прост, но ваш сопутствующий цикл над наблюдениями должен быть организован с вашим собственным кодом.

  3. Внесение нижнего индекса в LHS replace. Обозначение [] зарезервировано для весов, но в любом случае оно незаконно. Чтобы узнать о весах, search weights или help weight.

Обратите внимание, что при таком способе записи коэффициенты Джини не выравниваются ни с чем другим. Фиксация токена для этого - это запись связанных имен переменных вместе, как это сделано выше.

Более сложной версией этого решения будет использование postfile для сохранения нового набора данных.

+0

Спасибо!Он работает отлично. Во-первых, у меня была проблема иметь больше переменных, чем наблюдений, но она решена! –

+0

Хорошо. Я добавил некоторые дополнительные детали. –

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

  • Нет связанных вопросов^_^