假设我有一个包含一些变量名的本地宏
local indep "cat dog pig"
如果我希望宏只包含 cat
和 dog
,如何从宏中删除 pig
?
最佳答案
上下文是您想要从列出它们的字符串中删除变量名称。 OP 答案中的 subinstr()
解决方案仅在要删除的文本作为整个变量名称仅出现一次且不作为另一个变量名称的一部分出现时才有效。因此,使用等效但不完全相同的语法从该列表中删除 pig
的结果是
. local names "cat dog pig piglet"
. local names : subinstr local names "pig" "", all
. di "`names'"
cat dog let
这不是你想要的。解决办法是坚持删除的一定是一个词。在 Stata 中,单词可以或可以用空格分隔(除了用双引号括起来);在 Stata 变量名的情况下,不同的变量名总是不同的词。
. local names "cat dog pig piglet"
. local names : subinstr local names "pig" "", word
. di "`names'"
cat dog piglet
在处理变量名列表时,Stata 不关心多个空格而不是单个空格,因此也不需要您。但如果他们冒犯了,他们可以减少到单个空间。
另请参阅函数 subinstr()
和 subinword()
以获得本质上相似的方法。在一些旧版本的 Stata 中,对此类函数的字符串长度有相当严格的限制,这使得使用上面使用的构造 : subinstr
对所有但非常短的列表都是可取的。
然而,这是一个完全不同的解决方案:
. local names "cat dog pig piglet"
. local pig "pig"
. local names : list names - pig
. di "`names'"
cat dog piglet
在一个程序中,这通常要好得多,特别是如果你想一次删除几个名字(更常见的是“单词”)。
关于stata - 如何在 Stata 中对局部宏进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892553/