我正在使用从我无法访问的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之外,所有这些都是彼此不同的:
删除有问题的字符(无法用'引号太少'):
newlbl = subinstr(`"`varlbl'"',`"`"',"",.) newlbl = subinstr(`"`varlbl'"',`"`"',"",.) // escaping doesn't help, either
如果角色存在,请执行其他操作(失败并且'引用太少'):
如果strpos("
varlbl'“',"
”')> 0 {
//别的什么
}
替换本地代表反引号(在这种情况下失败和愚蠢):
local bt `"`"' local newlbl = subinstr(`"`varlbl'"',`"`bt'"',"",.)
使用-regexr-因为它可能在某种程度上更强大(失败w /'引用太少'):
local varlbl = regexr(`"`varlbl'"',"`","")
使用xmlsave
或outfile, dictionary
导出为纯文本或XML,并使用其他语言进行查找/替换。 这是有效的,但却是一个痛苦的解决方法。
因为这些反叛是纯粹的麻烦,删除它们就足够了。感谢阅读,考虑和任何反馈。干杯!
答案 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
.