stata语法

时间:2016-05-20 21:39:40

标签: stata

为了清理数据,我正在编写一个获取变量列表的函数,并用空字符串替换字符串列表。虽然我有解决问题的代码,但我想学习如何使用变量长度的字符串列表作为参数。

为了理解简单版本,以下内容将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用于其他任务。

1 个答案:

答案 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")