Stata:用于存储基尼系数值的for循环

Stata: for loop for storing values of Gini coefficient

我有 133 个收入变量(每个变量代表一个组)。我想要所有这些组的基尼系数,所以我在 Stata 中使用 ineqdeco。我无法手动计算所有这些系数,所以我创建了一个 for 循环:

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
     }
    }

我不知道最后这个方法是否有效。 在所有情况下,我都会收到错误:weight not allowed r(101)。我不知道这意味着什么,也不知道该怎么办。基本上,我想计算所有 133 个变量的基尼系数,并将这些值存储在长度为 133 的向量中,因此一个变量存储了所有系数。

编辑:我发现错误与 replace 命令有关。我将这一行替换为:

replace sgini  = $S_gini in `i'

但现在不是"loop",所以我得到了sgini所有条目中的第一个值。

你的内循环没有明显的原因。如果你没有比观察更多的变量,那么这可能有效:

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. replace 的左轴添加下标。 [] 符号是为权重保留的,但在任何情况下都是非法的。要了解权重,search weightshelp weight

请注意,使用这种记录结果的方式,基尼系数不会与其他任何东西对齐。一个令牌修复是记录相关的变量名称,就像上面所做的那样。

此解决方案的更高级版本是使用 postfile 保存到新数据集。