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
}
您的代码中明显的问题(似乎)包括:
变量和局部宏之间的混淆。如果你对其他语言有很多经验,就很难打破旧的思维习惯。 (Mata 在这里更像其他语言。)
不知道循环观察是自动的。或者也许没有看到这里只需要一个循环,扭曲是变量循环很容易,但是你的观察循环需要用你自己的代码来安排。
在 replace
的左轴添加下标。 []
符号是为权重保留的,但在任何情况下都是非法的。要了解权重,search weights
或 help weight
。
请注意,使用这种记录结果的方式,基尼系数不会与其他任何东西对齐。一个令牌修复是记录相关的变量名称,就像上面所做的那样。
此解决方案的更高级版本是使用 postfile
保存到新数据集。
我有 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
}
您的代码中明显的问题(似乎)包括:
变量和局部宏之间的混淆。如果你对其他语言有很多经验,就很难打破旧的思维习惯。 (Mata 在这里更像其他语言。)
不知道循环观察是自动的。或者也许没有看到这里只需要一个循环,扭曲是变量循环很容易,但是你的观察循环需要用你自己的代码来安排。
在
replace
的左轴添加下标。[]
符号是为权重保留的,但在任何情况下都是非法的。要了解权重,search weights
或help weight
。
请注意,使用这种记录结果的方式,基尼系数不会与其他任何东西对齐。一个令牌修复是记录相关的变量名称,就像上面所做的那样。
此解决方案的更高级版本是使用 postfile
保存到新数据集。