我已经制作了一个变量名列表,并希望检查我排除了哪些变量。我最好猜测的最后一行不起作用,因为r(varlist)
不是宏名称:
input abc bca cba
1 1 1
end
global mykeeps abc cba
ds
di "`: list local(r(varlist)) - global(mykeeps)'"
我知道我可以在这里做一个笨重的三线:
local rvarlist "`r(varlist)'"
di "`: list rvarlist - global(mykeeps)'"
macro drop rvarlist
我在问是否有更简洁(或更好)的方式。
我查看了help macrolists
和help return list
的文档。
答案 0 :(得分:3)
如果您断定不需要删除本地宏rvarlist
,则可以使代码成为“笨重”的双线程。当地人只是自己消失了。我通常不会发现需要明确删除它们,尽管我并不是说这是永远不必要的。
我会更担心您对global
的使用。它们的使用会产生意想不到的影响,因为与local
不同,它们不会消失并且可能与其他系统/程序名称空间发生冲突。只有当真的知道你在做什么时才使用它们
您的代码的替代方法可能如下,但如果您使用ds
过滤掉变量,则会失去功能:
clear
set more off
input abc bca cba
1 1 1
end
local mykeeps abc cba
unab myvars: _all
di "`:list myvars - mykeeps'"
如果您安装用户编写的命令findname
(Nick Cox的SSC),您将获得功能并允许直接生成本地宏。过滤后的变量列表可以直接放入本地:
clear
set more off
input abc bca cba
1 1 1
end
local mykeeps abc cba
findname, local(myvars)
di "`:list myvars - mykeeps'"
请参阅相应的帮助文件以及Speaking Stata: Finding variables。