使用带有`:list'语法的返回列表宏

时间:2014-10-16 13:39:34

标签: set stata

我已经制作了一个变量名列表,并希望检查我排除了哪些变量。我最好猜测的最后一行不起作用,因为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 macrolistshelp return list的文档。

1 个答案:

答案 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