在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版列表的信息。