Stata 自定义程序调试语法
我创建了下面的程序,它不能很好地处理字符串表达式。我还没有找到正确的调整方法来添加语法定义,以使其按预期工作 我认为这是一件小事,但我还没能把它做好。或者,如果您提到一些有帮助的东西,我们也将不胜感激 包括产生相同错误的程序和一些伪代码 谢谢Stata 自定义程序调试语法,stata,Stata,我创建了下面的程序,它不能很好地处理字符串表达式。我还没有找到正确的调整方法来添加语法定义,以使其按预期工作 我认为这是一件小事,但我还没能把它做好。或者,如果您提到一些有帮助的东西,我们也将不胜感激 包括产生相同错误的程序和一些伪代码 谢谢 cap program drop repl_conf program define repl_conf syntax varlist =exp [if] qui count `if' if r(N) ==0 { di a
cap program drop repl_conf
program define repl_conf
syntax varlist =exp [if]
qui count `if'
if r(N) ==0 {
di as err "NO MATCHES -- NO REPLACE"
exit 9
}
else {
noi dis "SUCCESSFUL REPLACE of >=1 OBS -- " r(N) " OBS replaced"
qui replace `varlist' `exp' `if'
}
end
sysuse auto, clear
repl_conf length=999 if length==233
repl_conf make="ZZZ" if make=="AMC Concord"
type mismatch
r(109);
这更进一步。我移动了第二条消息,因此只有在
替换成功时才会发出该消息
program define repl_conf
gettoken varname 0 : 0, parse(=)
confirm var `varname'
gettoken eq 0 : 0, parse(=)
syntax anything [if]
qui count `if'
if r(N) == 0 {
di as err "NO MATCHES -- NO REPLACE"
exit 9
}
else {
qui replace `varname' = `anything' `if'
noi di "SUCCESSFUL REPLACE of >=1 OBS -- " r(N) " OBS replaced"
}
end
sysuse auto, clear
repl_conf length=999 if length==233
repl_conf make="ZZZ" if make=="AMC Concord"
我认为这里只能是一个带有数值结果的表达式。当提供带有字符串结果的语句时,您的程序没有传递语法
语句。我想您需要使用gettoken
逐个剥离命令行中的标记。这似乎是一个不幸的功能replace
和gen
都可以使用字符串或数字exp
s,但它们都是内置命令。非常感谢,@NickCox。这很有效&帮助我修复了gettoken
语法,我后来遇到了问题。