-1

我有 133 个收入变量(每个变量代表一个组)。我想要所有这些组的基尼系数,所以我ineqdeco在 Stata 中使用。我无法手动计算所有这些系数,所以我创建了一个 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'

但现在它没有“循环”,所以我得到了所有条目中的第一个值sgini

4

1 回答 1

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. 在 a 的 LHS 上放置一个下标replace。该[]符号是为权重保留的,但在任何情况下都是非法的。要了解权重,search weightshelp weight.

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

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

于 2015-12-07T16:21:11.803 回答