为了清理数据,我正在编写一个获取变量列表的函数,并用空字符串替换字符串列表。虽然我有解决问题的代码,但我想学习如何使用变量长度的字符串列表作为参数。
为了理解简单版本,以下内容将myval1和myval2中的任何“X”替换为空字符串,并调用如下:
replace_string_with_empty myval1 myval2, code("X")
代码是,
capture program drop replace_string_with_empty
program replace_string_with_empty
syntax varlist(min=1), Code(string)
foreach var in `varlist' {
replace `var' = "" if `var' == "`code'"
}
end
但如果我有几个代码怎么办?忘记可能有更简洁的方法来做到这一点,我想把它称为像
这样的东西 replace_string_with_empty myval1 myval2, codes("X" "NONE")
但我无法弄清楚语法命令中的类型等。例如,以下内容不起作用
capture program drop replace_string_with_empty
program replace_string_with_empty
syntax varlist(min=1), Codes(namelist)
foreach var in `varlist' {
foreach code in `codes' {
replace `var' = "" if `var' == "`code'"
}
}
end
有什么想法吗? (再次,我确信有更好的方法可以解决这个问题,但我想弄清楚如何以这种方式将syntax
用于其他任务。
答案 0 :(得分:2)
以下是一种简单的方法示例。 asis
选项将单独保留引号,但在引用要重新编码为null的字符串时,我们需要使用复合引号:
capture program drop replace_string_with_empty
program replace_string_with_empty
syntax varlist(min=1 string), Codes(string asis)
tokenize `"`codes'"'
while "`1'" != "" {
foreach var of varlist `varlist' {
replace `var' = "" if `var'==`"`1'"'
}
macro shift
}
end
sysuse auto, clear
clonevar make2=make
replace_string_with_empty make*, codes("AMC Concord" "AMC Spirit" "Audi 5000")