我在下面创建了我的代码的玩具示例。在这个玩具示例中,我想创建一个自创建参考组中所有较高价格减去较低价格的度量。因此,在每个参考组中,我想将每个人从同一组中其他人的所有更高价格值中减去其价格值。我不想有负面的差异。然后我想总结所有这些差异。在创建此代码时,我在这里找到了一些帮助:http: //www.stata.com/support/faqs/data-management/try-all-values-with-foreach/
但是,代码对我来说并不完美,因为我的数据集非常大(几个 100K obs),并且网站上的示例和我的代码只能在 Stata 中的 numlist 最大值 1600 之前工作。(我使用的是第 12 版)。由于数据集的大小,具有自动数据集的玩具示例有效。
我想问一下是否有人知道如何更有效地编写代码,以便我可以绕过 numlist 限制。我考虑过直接对差异求和而不将它们保存在中间变量中,但这也破坏了 numlist 限制。
clear all
sysuse auto
ren headroom refgroup
bysort refgroup : egen pricerank = rank(price)
qui: su pricerank, meanonly
gen test = `r(max)'
su test
foreach i of num 1/`r(max)' {
qui: bys refgroup: gen intermediate`i' = price[_n+`i'] -price if price[_n+`i'] > price
}
egen price_diff = rowmax(intermediate*)
drop intermediate*