Stata:如何分隔本地宏的元素

时间:2016-02-04 01:09:47

标签: stata

我正在试图找出一种分隔局部宏元素的方法,以便我可以通过它们在宏中的位置来引用每个元素。例如,在下面的本地宏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")识别为列表中的第二个元素。关于我如何能够实现这一目标的任何想法?

2 个答案:

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