【问题标题】:Error in reshape long multiple variables重塑长多个变量时出错
【发布时间】:2018-08-06 15:47:20
【问题描述】:

我必须reshape 我的数据集从宽到长。我有 500 个变量,范围从 2016 年到 2007 年,记录为abcd2016 等等。我需要一个允许我 reshape 而不写所有变量名称的程序,然后我运行:

unab vars : *2016 
local stubs16 : subinstr local vars "2016" "", all
unab vars : *2015 
local stubs15 : subinstr local vars "2015" "", all

以此类推,然后:

reshape long `stubs16' `stubs15' `stubs14' `stubs13' `stubs12' `stubs11' `stubs10' `stubs09' `stubs08' `stubs07', i(id) j(year)

但我得到了错误

invalid syntax
r(198);

为什么?你能帮我解决它吗?

【问题讨论】:

  • 一组存根就足够了!
  • @NickCox 我不熟悉这种语法和这些命令,所以谢谢你的评论,我会听从你的建议。
  • 这个建议的一个早期来源是stata.com/support/faqs/data-management/problems-with-reshape,其中使用一个存根是明确的。如果变量是a2016 b2016 c2016 a2017 b2017 ,您需要使用*2016,即您使用的通配符必须包含您需要的所有前缀。

标签: syntax-error stata reshape stubs


【解决方案1】:

这个想法是在整形为长格式时只指定存根。为此,您需要从变量名称中删除年份部分,并将唯一存根存储在可以传递给 reshape 的本地中:

/* (1) Fake Data */
clear
set obs 100
gen id = _n
foreach s in stub stump head {
    forvalues t = 2008(1)2018 {
        gen `s'`t' = rnormal()
    }
}

/* (2) Get a list of stubs and reshape */
/* Get a list of variables that contain 20, which is stored in r(varlist) */
ds *20*
/* remove the year part */
local prefixes = ustrregexra("`r(varlist)'","20[0-9][0-9]","")
/* remove duplicates from list */
local prefixes: list uniq prefixes 
reshape long `prefixes', i(id) j(t)

这会将数字后缀存储在名为 t 的变量中。

【讨论】:

  • 非常感谢您的有用建议,Dimitriy。只是一个澄清:在我的情况下我应该在这里写什么gen s't' = rnormal()
  • 没什么。该命令只是创建一个玩具数据集。在您的情况下,您已经拥有数据。
  • @Macrina 不接受问题的答案不是一个好习惯。最好留下后续评论,而不是要求澄清。
  • @PearlySpencer 如果接受的意思是“解决错误”,我认为最好不接受答案。我有两种错误:一种,正如尼克所说,是我重复了 10 次存根的名字;第二个与我的 Stata 应用程序和我的笔记本电脑有关,需要安装“Microsoft Visual C++ 2008 Service Pack 1”x86 e x64”。我感谢 Dimitriy 的回答,但帮助我的是尼克的回答。无论如何,谢谢大家。我们可以关闭这个帖子了。
  • @Macrina 你在什么操作系统上?我从来没有听说过这个要求。出于好奇,您能否提供一个指向记录此要求的页面的链接?
猜你喜欢
  • 2017-03-01
  • 2012-04-20
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2014-05-12
  • 2018-05-05
相关资源
最近更新 更多