错误:太多')'或者']'当使用foreach循环时

时间:2016-04-08 08:22:53

标签: stata

当我在Stata中使用foreach循环时,我被一个奇怪的错误消息弄糊涂了。

我从一个数据集中收集了几个地理名称的名称列表,并将它们放在三个本地区中:countycitymuni。然后,我"匹配"它们在另一个数据集中具有某些名称(parkname)。

前两个工作正常,但对于最后一个本地宏muniforeach失败并抛出一个奇怪的错误消息。但是,正如您所看到的,我不会在循环体中添加"太多" 括号:只有两个。

那么问题的根源是什么?我高度怀疑它源于我构建最后一个本地的方式,但我无法弄清楚问题。

顺便说一句,city1city4指的是中文字符(Unicode)中的四个城市名称,但由于Stack Overflow不允许使用Unicode字符,我会替换它们。我不确定这个事实是否与错误信息有关。

import excel province=A city=B county=C using geonamelist.xlsx, clear
*-------------------------
*  city and county list
*-------------------------
qui levelsof county   , local(county)
qui levelsof city     , local(city)
** the municipalities are classified as provincial unit
local muni "city1" "city2" "city3" "city4"

*--------------------------
*   Industry Park data
*--------------------------
// Import industry park namelist
import excel order=A province=C class=D parkname=E area_NDRC=F  ///
area_MLR=J batch=I using namelist1.xls, clear

drop in 1/1
tempfile provincial
save "`provincial'"

import excel order=A province=C class=D parkname=E area_NDRC=F  ///
area_MLR=J batch=I using namelist2.xls,clear

drop in 1/1
append using "`provincial'"



** Matching the county names
gen county = ""
foreach i of local county {
    qui replace county = "`i'"     if strpos(parkname,"`i'")>0
}
gen city   = ""
foreach i of local city   {
    qui replace city  =  "`i'"     if strpos(parkname,"`i'")>0
}
foreach i of local muni   {
    qui replace city  =  "`i'"     if strpos(parkname,"`i'")>0
}

sort order

1 个答案:

答案 0 :(得分:2)

我们这里没有任何内容可以重现,因为您的示例取决于我们没有的文件。不幸的是,我和(我怀疑)许多最活跃的Stata用户不会以任何方式阅读或说中文。

正如您所说,语法没有明显区别。

但是,我建议不要这样做:

. local muni "city1" "city2" "city3" "city4"

. mac li
<other stuff listed here> 
_muni:          city1" "city2" "city3" "city4

Stata将外引号标记为分隔符。你在实践中有真名,但无论哪种方式,你需要复合双引号形式

local muni `" "city1" "city2" "city3" "city4" "' 

所以我唯一的猜测是,你得到的信息是该宏定义的副作用。