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

时间:2015-12-07 15:52:08

标签: syntax-error store stata gini

我有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'

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

1 个答案:

答案 0 :(得分: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. 将下标放在replace的LHS上。 []符号是为权重保留的,但在任何情况下都是非法的。要了解权重,search weightshelp weight

  4. 请注意,使用这种记录结果的方式,基尼系数不会与其他任何内容对齐。对象的修正是将相关的变量名称记录在一起,如上所述。

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