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 个)。
假设我有宏:
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 个)。