【问题标题】:Define newvarlist for imported variables when using the merge command in Stata在Stata中使用merge命令时为导入的变量定义newvarlist
【发布时间】:2014-08-14 22:33:42
【问题描述】:

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

merge 1:1 id using "data.dta", keepusing(a1 b2 c3 d4)

(变量名不是真实的)。我想像这样定义一个本地组:

local VARLIST a1 b2 c3 d4

但是,由于变量的名称可能会随着时间而改变,我想通过创建一个包含导入变量的列表来自动化该过程。 merge 没有 r(varlist) 输出,所以我不能直接这样做。此外,我的数据库中已经有变量,所以使用ds, local newlistname r(varlist) 是不够的。我有 Stata 12。

【问题讨论】:

  • 我想我不明白。您知道将用于keepusing() 选项的变量,但不能将它们放在本地?这是为什么?也许您想解释一下为什么要这样做,以便提供更好的建议。
  • 导入的变量会根据我的需要而变化,因此它们不是固定的。这就是为什么我想以自动方式与它们一起定义一个新列表。

标签: merge local stata


【解决方案1】:

以下是如何执行此操作的示例:

 /* 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。

【讨论】:

  • 完美运行!不知道您可以对列表进行操作。新世界为我打开,谢谢。尽管如此,对于这种特殊情况,如果 merge 像其他命令一样生成 r(varlist) 会容易得多。
  • @luchonacho 更多关于列表 here 的版本 13。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多