stata forvalues循环中引号太少且错误无效

stata forvalues循环中引号太少且错误无效,stata,Stata,我正在使用以下forvalues循环,但它给了我错误 forvalues i=1/22919 { quietly replace standarisedname="`y`i''" if schoolname=="`x`i''" & missing(standarisedname) } 类型不匹配r109错误 但是当我使用双引号时,比如 forvalues i=1/22919 { quietly replace standarisedname=`"`y`i''"' if schoolna

我正在使用以下forvalues循环,但它给了我错误

forvalues i=1/22919 {
quietly replace standarisedname="`y`i''" if schoolname=="`x`i''" & missing(standarisedname)
}
类型不匹配r109错误

但是当我使用双引号时,比如

forvalues i=1/22919 {
quietly replace standarisedname=`"`y`i''"' if schoolname==`"`x`i''"' & missing(standarisedname)
}
返回的引号太少错误

当我使用

forvalues i=1/22919 {
quietly replace standarisedname=""`y`i''"" if schoolname==""`x`i''"" & missing(standarisedname)
}
forvalues i=1/22919 {
quietly replace standarisedname="`"`y`i''"'" if schoolname=="`"`x`i''"'" & missing(standarisedname)
}
返回了无效的“public”错误198


谢谢你的帮助

这不是一个完整的答案,但它很长,包含太多的语法,不能作为注释。很难看出真正的问题是什么,因为你的例子是不可复制的

这意味着您有两个名为y1到y22919和x1到x22919的本地宏。对吗

类型不匹配意味着您引用的一个或两个变量不是字符串。请给我们看看测试结果

describe schoolname standardisedname 
在第二个示例中,我看不到不匹配的引号

在你的最后一个例子中

""`y`i''""
类似的用法显然对你没有帮助。筑巢通常没有帮助。可能public是您正在使用的某个本地宏的文本的一部分


我建议你支持并解释你想做什么,因为我的感觉是会有一个更简单的方法来做

非常感谢你,尼克!description返回以下结果存储显示值变量名称类型格式标签变量标签schoolname str60%60s标准名称str42%42s标准名称o,它们都是字符串变量。我的最后一个建议仍然有效。我基本上是用存储在宏xi中的字符串替换standardi~变量“如果学校名称等于存储在宏yi中的特定字符串”。我有超过200000个观察值来合并这些更改,所以我使用宏来循环这些观察值。我理解您的代码的功能。我想问的是,问题是什么,如何以及为什么创建了数千个宏。要使Stata左引号在命令中正确显示,请使用反斜杠左引号。我有原始数据,这些数据是在excel中输入的,没有任何数据验证检查。问题是,大多数单词都有50多个变体,我在一些常用单词中发现了这些变体,并在定义的x宏中记录了这些变体。单词的实际拼写是使用这些宏变量在宏y中定义的,我将标准化schoolname字符串变量,使用forvalues循环和stata中的subinstr函数消除一些已定义的拼写错误。因为每一个宏都记录着每一个打字错误,所以宏的数量是千。非常感谢。