这是一条仍然感兴趣的旧线索,因此第一次忽略的材料和技术仍然适用。
更一般的技术是使用总计。最简单的是,其他人的总数=总数 - 这个值。在egen
框架,是要看起来像
egen total = total(price), by(market)
egen n = total(!missing(price)), by(market)
gen avprice = (total - cond(missing(price), 0, price))/cond(missing(price), n, n - 1)
的egen
的total()
功能在其论调忽略遗漏值。如果有缺失值,我们不希望将它们包括在计数中,但我们可以使用!missing()
,如果不缺少,则产生1,如果缺失,则产生0。 egen
的count()
是另一种方法。
前面给出的代码在错误出现时给出了错误的答案,因为它们包含在计数_N
中。
即使缺少一个值,其他值的平均值仍然有意义。
如果没有价值缺失,最后一行上述简化为
gen avprice = (total - price)/(n - 1)
到目前为止,这可能看起来像没有比以前的一小段代码变种多,但它确实很容易地扩展到使用权。大概我们想要一个weight
的其他人的加权平均价格。我们可以利用total()
处理表达式的事实,该表达式可能比变量名称更复杂。事实上,上面的代码已经这样做了,但它经常被忽略。
egen wttotal = total(weight * price), by(market)
egen sumwt = total(weight), by(market)
gen avprice = (wttotal - price * weight)/(sumwt - weight)
如前所述,如果price
或weight
是不断丢失,你需要更复杂的代码,或只是为了确保您排除从计算这样的观察。
又见Stata的常见问题
如何创建变量总结为一组的其他成员的每个单独的属性?
http://www.stata.com/support/faqs/data-management/creating-variables-recording-properties/
对于较宽范围的讨论。
(如果数字变大,与double
的工作。)
编辑2018 3月2日这是一个古老的线程,而这又需要更新一个新的职位。 rangestat
(SSC)可以在这里使用,并提供单线解决方案。毫不奇怪,选项excludeself
明确地添加了这些类型的问题。但是,而手段解决方案易于使用的身份
意味着对他人=(总 - 值对个体经营)/(计数 - 1)
许多其他综合性指标不屈服于类似的,简单的一招在这个意义上rangestat
包括更多的通用编码。
clear
input Market Firm Price
1 1 100
1 2 150
1 3 125
2 1 50
2 2 100
2 3 75
3 1 100
3 2 200
3 3 200
end
rangestat (mean) Price, interval(Firm . .) by(Market) excludeself
list, sepby(Market)
+----------------------------------+
| Market Firm Price Price_~n |
|----------------------------------|
1. | 1 1 100 137.5 |
2. | 1 2 150 112.5 |
3. | 1 3 125 125 |
|----------------------------------|
4. | 2 1 50 87.5 |
5. | 2 2 100 62.5 |
6. | 2 3 75 75 |
|----------------------------------|
7. | 3 1 100 200 |
8. | 3 2 200 150 |
9. | 3 3 200 150 |
+----------------------------------+
你可以给我一个很小的例子,我的计算...它的wud很清楚 – Teja 2012-03-06 04:19:27
我做了(数据表是我的例子)。 – prototoast 2012-03-06 04:31:14
正在讨论的'if'不是'if'命令,而是'if'限定符。我已经编辑过。 – 2014-10-28 23:24:49