我有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
的所有条目中得到第一个值。
答案 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
}
您的代码中显而易见的问题(似乎)包括:
变量和本地宏之间的混淆。如果你对其他语言有很多经验,很难打破旧的心理习惯。 (Mata在这里更像其他语言。)
没有意识到观察循环是自动的。或者也许没有看到这里只需要一个循环,扭曲是变量上的循环很容易,但你需要用自己的代码来安排伴随的观察循环。
将下标放在replace
的LHS上。 []
符号是为权重保留的,但在任何情况下都是非法的。要了解权重,search weights
或help weight
。
请注意,使用这种记录结果的方式,基尼系数不会与其他任何内容对齐。对象的修正是将相关的变量名称记录在一起,如上所述。
此解决方案的更高级版本是使用postfile
保存到新数据集。