gpt4 book ai didi

set - 使用具有 `: list' 语法的返回列表宏

转载 作者:行者123 更新时间:2023-12-04 21:18:00 26 4
gpt4 key购买 nike

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

最佳答案

如果您断定不需要删除本地宏 rvarlist,则可以使您的代码成为“笨拙”的两行代码。本地人只是自己消失了。我通常认为没有必要明确删除它们,尽管我并不是说这永远没有必要。

我会更担心您对 global 的使用。它们的使用可能会产生意想不到的效果,因为与 local 不同,它们不会消失并且可能与其他系统/程序 namespace 发生冲突。仅当您真正知道自己在做什么时才使用它们

您的代码的替代方案可能如下,但如果您使用 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 .

关于set - 使用具有 `: list' 语法的返回列表宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com