Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata:如何分隔本地宏的元素_Stata - Fatal编程技术网

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

Stata:如何分隔本地宏的元素,stata,Stata,我试图找出一种划分本地宏元素的方法,这样我就可以根据每个元素在宏中的位置来引用它们。例如,在下面的本地宏列表\u 1中,通过在整个列表周围添加“”“”并在每个元素周围包含“”,Stata将识别“项目1”是列表中的第一个元素,“项目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 `lis

我试图找出一种划分本地宏元素的方法,这样我就可以根据每个元素在宏中的位置来引用它们。例如,在下面的本地宏
列表\u 1
中,通过在整个列表周围添加“”“”并在每个元素周围包含“”,Stata将识别“项目1”是列表中的第一个元素,“项目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”)
识别为列表中的第二个元素。关于我如何才能做到这一点,有什么想法吗

我认为,除了最里面的双引号外,其他所有引号都必须是复合引号。以下

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") ===

复合双引号开始和结束:

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

复合双引号必须为左单引号-双引号开头,双引号-右单引号结尾。你的最后一行代码是错误的,这对Stata来说没有什么特别的意义。NB不是STATA。对不起-那是一种类型。我已经纠正了上面的错误,复合双引号可以嵌套在其他同类中。主要的一点是可以区分左右同胞,因此允许嵌套。实际上,一旦你有了多层引号,你就应该重写代码。例如,我看到Stata程序员将不同的字符串打包到一个本地宏中,但却很难将它们逐个取出,这是完全不必要的。