Stata:处理包含受保护字符的变量标签

时间:2015-08-05 15:01:26

标签: stata

我正在使用从我无法访问的SPSS文件导入的大约一百个Stata数据文件。在构建所有文件的摘要描述时,我正在记录变量和值标签,其中包括如下循环:

foreach v of varlist _all {
   local varlbl: variable label `v'
   // do some more things
   file write `outfile' `"`v'"' // and some other stuff
}

这几乎所有时间都很好,并且额外的反引号和单引号正确地逃避了更常见的半变量内容,例如变量标签中的内联引号。

是什么打破它是这样的标签:

BC9C            str1    %-1s       BC9C       See/hear ACT: `Newspaper

此处它无法处理Newspaper之前的内联反引号。我已经尝试过以下方法来解决这个问题,除了#5之外,所有这些都是彼此不同的:

  1. 删除有问题的字符(无法用'引号太少')

    newlbl = subinstr(`"`varlbl'"',`"`"',"",.)
    newlbl = subinstr(`"`varlbl'"',`"`"',"",.) // escaping doesn't help, either
  2. 如果角色存在,请执行其他操作(失败并且'引用太少')

    如果strpos(" varlbl'“',"”')> 0 {     //别的什么 }

  3. 替换本地代表反引号(在这种情况下失败和愚蠢)

    local bt `"`"'
    local newlbl = subinstr(`"`varlbl'"',`"`bt'"',"",.)
  4. 使用-regexr-因为它可能在某种程度上更强大(失败w /'引用太少')

    local varlbl = regexr(`"`varlbl'"',"`","")
  5. 使用xmlsaveoutfile, dictionary导出为纯文本或XML,并使用其他语言进行查找/替换。 这是有效的,但却是一个痛苦的解决方法。

  6. 因为这些反叛是纯粹的麻烦,删除它们就足够了。感谢阅读,考虑和任何反馈。干杯!

2 个答案:

答案 0 :(得分:1)

这应该这样做。我使用了两个生成语句来显示详细信息,INSERT IGNORE可以用作char(96)的第二个参数。

subinstr()

答案 1 :(得分:0)

好的,这是一种更好地匹配问题的方法。我一直在努力探索使其更优雅的方法。关键是使用宏扩展函数subinstr而不是使用非宏函数subinstr()

. describe x

              storage   display    value
variable name   type    format     label      variable label
------------------------------------------------------------------------------------------------
x               float   %9.0g                 junk with `backtick

. local xl : variable label x

. local b `"`"'

. local xl2 : subinstr local xl "`b'" ""

. display "`xl2'"
junk with backtick

.