2013-08-05 24 views
1

我想从供应商名称中删除某些子串。所以我把一个宏,并做到这一点:Stata子串错误

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之后加上“”,但那不起作用。任何想法我做错了/另一种方式来实现这一点?

+0

这个工作适合你吗? –

回答

3

你的嵌套引号给你带来麻烦。您的代码可以固定在另外的一些compound double quotes在当地的宏定义和替换:

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'","",.) 
} 

这不是与第一个变体一样清晰可辨。

2

@Dimitriy 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而言,“和”是匹配的字符(可以嵌套,尽管在这里不需要)。