在Stata中,我有以下变量:latitude
,longitude
,avg_luminosity
。对于每次观察(总共1547次),我需要找到一个总和(让我们称之为变量sum_lum
)的平均光度为"邻居"这一特定latitude
和longitude
对,latitude
和longitude
位于0.5范围内的人。我尝试了以下代码:
tempvar sum_temp
forvalues i=1/1547 {
egen `sum_temp' = sum(avg_luminosity) if (latitude<latitude[_n]+0.5 & latitude>latitude[_n]-0.5 & longitude<longitude[_n]+0.5 & longitude>longitude[_n]+0.5)
replace sum_lum[_n]= sum_temp
drop `sum_temp'
}
但代码不起作用(weights not allowed
)。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
我们这里没有一个非常好的问题,因为没有给出运行代码的样本数据。有关如何提出好问题,请参阅https://stackoverflow.com/help/mcve。我们有1547是观察的数量。
但是,此代码可识别各种问题。
首先,考虑if
限定符:
if (latitude<latitude[_n]+0.5 & latitude>latitude[_n]-0.5 & longitude<longitude[_n]+0.5 & longitude>longitude[_n]+0.5)
我们需要纠正错误:最后+0.5
显然应该是-0.5
。
要关注主要问题,请将latitude
替换为y
,将longitude
替换为x
if (y < y[_n]+0.5 & y > y[_n]-0.5 & x < x[_n]+0.5 & x > x[_n]-0.5)
下标[_n]
只是意味着当前的观察并且是多余的:
if (y < y+0.5 & y > y-0.5 & x < x+0.5 & x > x-0.5)
从中可以看出,资格证书不具备资格:现在(使用数学符号) y - 0.5&lt;总是正确的。 y &lt; y + 0.5, x 类似。
此代码的意图是将任何 y
和任何 x
与当前{{ 1}}和y
,但这不是它在Stata中的作用。
否则,猜测可能是x
每次循环都有不同的解释,但事实并非如此。
其次,如果代码在其他方面是正确的,则循环[_n]
的效果将是重复完全相同的计算1547次。否则,代码的 intent 毫无疑问,但循环中没有任何内容以任何方式使用循环索引1/1547
。
第三,这些都不是报道的问题。
i
由于下标而失败,在等号之前replace sum_lum[_n]= sum_temp
不允许这样做:关于权重的错误消息是Stata猜测您正在尝试指定权重。声明也会失败(做你想做的事情,或者很可能完成任务),因为右边的变量应该是你刚刚创建的临时变量。
第四,尽管这是样式而不是语法,但使用replace
来计算总和是过度的。没有新的变量需要重新创建1547次才能成为egen
pred。
以下是对可行方法的猜测:
drop
该循环使用当前观察的纬度和经度。