【问题标题】:Stata: How to execute the georoute command for values of each variableStata:如何为每个变量的值执行 georoute 命令
【发布时间】:2017-06-29 12:27:36
【问题描述】:

是否可以同时为多个值运行命令 georoute?我正在运行以下行:

 georoutei, hereid(BfSfwSlKMCPHj5WbVJ1g) herecode(bFw1UDZM3Zgc4QM8lyknVg) startxy(46.1761413,6.1393099) endxy(46.99382,6.94049) km

但是,我有超过 1000 个值(坐标)作为起点和终点。我想告诉 Stata,比如为变量的每个值替换 startxy 和 endxy。所以,我试图在一个循环中做到这一点,但它不起作用。有人能帮我吗?

我正在尝试这样做:

clear all

set obs 1000
set seed 1254
ssc install georoutei

gen x1 = 45 + int(40+1)*uniform() 
gen xf = 46+ int(46+1)*runiform()
gen y1 = 6 + int(6+1)*runiform()
gen yf = 7 + int(7+1)*runiform()

georoutei, hereid(tKNXdBlaC1UoKDWAiJ4i) herecode(4SQsFZphiBfXL4xWa7SPgg) 
startxy(3.4372222,-76.33376) endxy(3.7231,-76.525902) km

forvalue i=1(1)1000{
levelsof x1, local(startx)
levelsof xf, local(endf) 
levelsof y1, local(starty)
levelsof yf, local(endy)
    georoutei, hereid(tKNXdBlaC1UoKDWAiJ4i) herecode(4SQsFZphiBfXL4xWa7SPgg) 
    startxy(`startx',`starty') endxy(`endx',`endy')km
}

然后我需要在矩阵或类似的东西中记录行进距离,以便有一个包含此信息的新变量。我希望节省一点时间,而不必为每对坐标运行一堆线。

谢谢!

【问题讨论】:

  • 你能发布你为循环尝试的内容吗?
  • 你好马修,我已经编辑了帖子,也许这个问题更容易理解。

标签: loops foreach stata


【解决方案1】:

问题在于循环的每次迭代都运行相同的levelsof 命令:没有为levelsof 指定ifin 限定符,因此对于循环的每次迭代,levelsof 是运行所有观察。

我建议使用显式下标,而不是 levelsof。您可以在herehere 阅读更多相关信息。例如:

generate distance = .
forvalues i = 1/100 {
    local startx = x1[`i']
    local endf = xf[`i']
    local starty = y1[`i']
    local endy = yf[`i']
    georoutei, hereid(tKNXdBlaC1UoKDWAiJ4i) herecode(4SQsFZphiBfXL4xWa7SPgg) startxy(`starty',`startx') endxy(`endy',`endx') km
    replace distance = r(dist) in `i'
}

把它变成一个循环绝对是个好主意!

【讨论】:

  • 我不太了解georoutei,所以我想确保x 和y 没有在选项中切换。例如,应该是startxy(`starty',`startx') 还是startxy(`startx',`starty')
  • 另外,应该是endx 而不是endf
  • 是的,我犯了一个语法错误,正确的方法是startxy(startx',starty')endxy(endx',endy')是一样的。
猜你喜欢
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多