在Stata中使用merge命令时,为导入的变量定义newvarlist

在Stata中使用merge命令时,为导入的变量定义newvarlist,merge,local,stata,Merge,Local,Stata,我正在使用merge将.dta文件中的几个变量导入当前数据库: merge 1:1 id using "data.dta", keepusing(a1 b2 c3 d4) (变量名不是真的)。我想这样定义一个本地组: local VARLIST a1 b2 c3 d4 但是,由于变量的名称可能会随着时间的推移而改变,因此我希望通过创建包含导入变量的列表来自动化该过程merge没有r(varlist)输出,因此无法直接执行此操作。此外,我的数据库中已经有变量,所以使用ds、localnewli

我正在使用
merge
将.dta文件中的几个变量导入当前数据库:

merge 1:1 id using "data.dta", keepusing(a1 b2 c3 d4)
(变量名不是真的)。我想这样定义一个本地组:

local VARLIST a1 b2 c3 d4

但是,由于变量的名称可能会随着时间的推移而改变,因此我希望通过创建包含导入变量的列表来自动化该过程
merge
没有
r(varlist)
输出,因此无法直接执行此操作。此外,我的数据库中已经有变量,所以使用
ds、localnewlistname r(varlist)
是不够的。我有Stata 12。

下面是一个如何做到这一点的示例:

 /* Make some fake data */
 sysuse auto, clear
 save auto.dta, replace
 rename (price-foreign) xxx_=

 /* Key Part */
 unab oldvarnames: _all
 merge 1:1 make using auto.dta, keepusing(price mpg) nogen 
 unab newvarnames: _all
 local added:list newvarnames - oldvarnames
 di "`added'" 
本质上,您是从合并后的变量名中减去合并前的变量名,以查找添加的内容


由于您使用的是Stata 12,可能会遇到字符串长度限制,因此请注意legulus。

我想我不明白。您知道将用于
keepusing()
选项的变量,但您不能将它们放在本地?为什么呢?也许你想解释一下为什么你想这样做,这样可以提供更好的建议。导入的变量根据我的需要而变化,所以它们不是固定的。这就是为什么我想用它们自动定义一个新的列表。工作得很好!我不知道你可以在名单上操作。新世界为我打开,谢谢。不过,对于这种特殊情况,如果merge像其他命令一样生成一个
r(varlist)
,那就容易多了。@luchonacho更多关于13版列表的信息。