Loops 生成新宏,为旧宏的单词添加前缀
定义宏Loops 生成新宏,为旧宏的单词添加前缀,loops,stata,stata-macros,Loops,Stata,Stata Macros,定义宏尝试: local try "a b c" 这将生成一个值为abc的宏 现在我需要一个新的宏try2,它接受值da db dc。也就是说,我想为旧宏的每个元素添加相同的前缀,并将其定义为一个新宏。据我所知,在官方统计中没有专门支持此功能的函数。有关附近的函数,请参阅帮助宏列表 旧软件包listutil(SSC)包含各种命令,prelist是相关的。我写了这篇文章,所以我建议只使用一般的技巧,而不是对别人的工作持消极态度 local try "a b c" local copy `try
尝试:
local try "a b c"
这将生成一个值为abc
的宏
现在我需要一个新的宏try2
,它接受值da db dc
。也就是说,我想为旧宏的每个元素添加相同的前缀,并将其定义为一个新宏。据我所知,在官方统计中没有专门支持此功能的函数。有关附近的函数,请参阅帮助宏列表
旧软件包listutil
(SSC)包含各种命令,prelist
是相关的。我写了这篇文章,所以我建议只使用一般的技巧,而不是对别人的工作持消极态度
local try "a b c"
local copy `try'
gettoken first copy : copy
while ("`first'" != "") {
local try2 `try2' d`first'
gettoken first copy : copy
}
di "try is {col 12} `try'"
di "try2 is{col 12} `try2'"
您也可以使用Mata来完成此操作
local try "a b c"
mata: st_local("try2", invtokens("d" :+ tokens(st_local("try"))))
assert "`try2'" == "da db dc"
换句话说,第二行就是这样做的,首先解释最里面的函数:
st_local(“try”)
:访问局部变量中的内容。这应评估为“a b c”
tokens(“abc”)
:将字符串拆分为令牌,例如令牌(“abc”)
->(“a”、“b”、“c”)
“d”:+(“a”、“b”、“c”)
:在Mata中,您可以将字符串与+
连接起来,这里:++
按元素顺序执行此操作,因此结果将是(“da”、“db”、“dc”)
invtokens((“da”、“db”、“dc”))
:将令牌放回字符串中,即invtokens((“da”、“db”、“dc”)
->“da db dc”
st_local(“try2”、“da db dc”)
:与local try2“da db dc”相当的Mata
您可以通过help mf\u st\u local
@sxgn了解有关Mata函数st\u local()
、tokens()
和invtokens()
的更多信息。如果这有帮助,您可以使用左侧的复选标记选择此作为答案。