Select Stata局部宏的前N个字

Select first N words of a local macro in Stata

假设我有宏:

local words = "first second third fourth"

我要select它的前3个字。我知道我可以select,说第二个,这个词使用:

local select: word 2  of `words' 
di "`select'"

但是,我想要一行 select 是所述宏的前 N 个单词(在本例中为 N=3)。现在,我使用的循环结构对于这样一个简单的过程来说似乎有点过分了。

local words = "first second third fourth"
local select: word 1  of `words' 
forvalues i=2/3 {
    local rest : word `i' of `words' 
    local select `select'  `rest'
}

di "`select'"
first second third

有更好的解决办法吗?谢谢

如果您知道有 4 个单词,您可以查找最后一个 space 并拆分前后。我不是说你一般都知道。

这是另一种通用方法。

local words = "first second third fourth"
tokenize "`words'"
local select "`1' `2' `3'"

di "`select'"
first second third

这是另一种通用方法:

local words = "first second third fourth"
mata : tokens = tokens(st_local("words"))
mata : st_local("select", invtokens(tokens[1..3]))

di "`select'"
first second third

这更容易扩展到更多的单词(只需替换 3 个)。