我正在试图找出一种分隔局部宏元素的方法,以便我可以通过它们在宏中的位置来引用每个元素。例如,在下面的本地宏list_1
中,通过在整个列表周围添加“”“并在每个元素周围包含”“,Stata将识别出”item 1“是列表中的第一个元素,”item 2“ “第二个元素,等等。
loc list_1 `" "item 1" "item 2" "item 3" "'
loc n: word count `list_1'
forval i=1/`n' {
loc element `: word `i' of `list_1''
}
但是,当您有元素列表包含“”时,如下例所示,Stata不会将这些元素识别为单个元素。
loc list_1 `" "inlist(var1,"a","b","c")" "inlist(var1,"e","f","g")" "'
我希望Stata能够将inlist(var1,"a","b","c")
识别为第一个元素,将inlist(var1,"e","f","g")
识别为列表中的第二个元素。关于我如何能够实现这一目标的任何想法?
答案 0 :(得分:2)
我相信除了最里面的双引号之外的所有引号都必须是复合的。以下
local list_1 `" `"inlist(var1,"a","b","c")"' `"inlist(var1,"e","f","g")"' "'
foreach word of local list_1 {
display `"=== `word' ==="'
}
产量
=== inlist(var1,"a","b","c") ===
=== inlist(var1,"e","f","g") ===
答案 1 :(得分:2)
复合双引号开头和结尾:
loc list_1 `"inlist(var1,"a","b","c") inlist(var1,"e","f","g")"'
forval i = 1/2 {
display `"`:word `i' of `list_1''"'
}
// or
foreach word of local list_1 {
display `"`word'"'
}
如果您使用
loc list_1 `" "inlist(var1,"a","b","c")" "inlist(var1,"e","f","g")" "'
化合物引号随后将被剥离,导致四个部分被标识为
inlist(var1,
a","b","c")"
inlist(var1,
e","f","g")"
后者和
loc list_1 "inlist(var1,"a","b","c")" "inlist(var1,"e","f","g")"
导致与您的示例相同的不良结果。鉴于您的设置,Stata正在尽力而为。
请注意,即使这适合您:
loc list_1 inlist(var1,"a","b","c") inlist(var1,"e","f","g")