循环不起作用

时间:2016-05-22 11:14:49

标签: stata cycle

在Stata中,我有以下变量:latitudelongitudeavg_luminosity。对于每次观察(总共1547次),我需要找到一个总和(让我们称之为变量sum_lum)的平均光度为"邻居"这一特定latitudelongitude对,latitudelongitude位于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)。有人可以帮我解决这个问题吗?

1 个答案:

答案 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

该循环使用当前观察的纬度和经度。