是否可以同时为多个值运行命令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
}
然后我需要在矩阵或类似的东西中记录行程距离,以获得包含此信息的新变量。我希望节省一点时间,而不是为每对坐标运行一堆线。
谢谢!
答案 0 :(得分:1)
问题是循环的每次迭代都运行相同的levelsof
命令:没有为if
指定in
或levelsof
限定符,因此对于每次迭代对于循环,levelsof
正在运行所有观察。
我建议使用显式下标而不是levelsof
。您可以详细了解here和here。例如:
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'
}
绝对是一个好主意,把它变成一个循环!