Stata子串错误

Stata子串错误,stata,Stata,我正在尝试从供应商名称中删除某些子字符串。因此,我放入一个宏并执行以下操作: local item "BANKOFAMERICA" " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE" " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " "

我正在尝试从供应商名称中删除某些子字符串。因此,我放入一个宏并执行以下操作:

 local item "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL"
foreach v in `item' {
replace vendor = subinstr(vendor,"`v'","",.)
}

然而,这给了我一个太少的错误。我试着在“v”附近复合“”但没用。你知道我做错了什么吗?

你的嵌套引号给你带来了麻烦。通过在本地宏定义和替换中添加一些代码,可以修复代码:

local item `" "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL" "'

foreach v of local item {
    replace vendor = subinstr(vendor,`"`v'"',"",.)
}
或者,您可以避免定义本地宏,只需使用:

foreach v in "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL" {
    replace vendor = subinstr(vendor,"`v'","",.)
}

这不像第一个变体那么清晰。

嵌套的引号给您带来了麻烦。通过在本地宏定义和替换中添加一些代码,可以修复代码:

local item `" "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL" "'

foreach v of local item {
    replace vendor = subinstr(vendor,`"`v'"',"",.)
}
或者,您可以避免定义本地宏,只需使用:

foreach v in "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL" {
    replace vendor = subinstr(vendor,"`v'","",.)
}

这不像第一个变体那么清晰。

迪米特里·V·马斯托夫的回答很好。这只是阐明了一个关键细节

你可以通过去看你的错误

. local item "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL"

. mac li 

发生的情况是,第一个和最后一个
被剥离为标记宏开始和结束的分隔符。必须首先使用复合双引号来停止此操作。就Stata而言,“”和“”是匹配的字符(可以嵌套,尽管此处不需要).

由@Dimitry V.Masterov给出的答案很好。这只是阐明了一个关键细节

你可以通过去看你的错误

. local item "BANKOFAMERICA"  " INC" " INCORPORATED" " SYS " " SYSTEMS" " PVT" " PRIVATE"    " LIMITED" " LTD" " LLC" " CORP" "LIMITED LIABILITY" "CORPORATION" " CORP " " COMPANY" " CO " " TECHNOLOGY" " TECH " " GLOBAL"

. mac li 

发生的情况是,第一个和最后一个
被剥离为分隔符,用于标记宏的开始和结束。你必须先用双引号来停止。就Stata而言,“”和“”是匹配字符(可以嵌套,尽管这里不需要)

这对你有用吗?对你有用吗?