【问题标题】:Stata multiple level reshape wide to longStata多级重塑从宽到长
【发布时间】:2015-07-15 20:40:55
【问题描述】:

我在尝试 reshape 一个从 longwide 的数据集时遇到了一些问题。这是一个示例,因为我认为这最能说明问题:

假设我想获取这个long 数据集...

|study_id  |event_date |code     |
|--------------------------------|
|1         |09 June 15 |546      |
|1         |09 June 15 |643      |
|2         |23 May 13  |324      |
|2         |12 May 13  |435      |

然后把它塑造成这样的wide...

|study_id    |event_date_1 |event_date_1_code1 |event_date_1code2| event_date_2   |event_date_2_code1 | event_date_2_code2|
|-------------------------------------------------------------------------------------------------------------------------|
|1           |09 June 15   |546                |643              |                |                   |                   |              
|2           |23 May 15    |324                |                 |12 May 13       |435                |                   |             

这样做的最佳方法是什么?我想我必须创建某种j 变量,但不确定如何创建它,所以每个event_date 可以有多个codes,每个study_id 可以有多个event_dates。

我已经尝试使用以下代码制作j 变量并进行整形:

//Sort by id (just in case)
sort study_id event_date code

//Create j variable
quietly by study_id: gen code_num = cond(_N==1, 1, _n)

//Reshape data
reshape wide event_date code, i(study_id) j(code_num)

但是,这并没有说明每个 event_date 都有多个潜在代码。

我正在尝试将数据转换为宽数据,以便可以将其与另一个宽数据集合并,然后对两者进行分析。任何一组中的观察都是唯一的 study_id。

【问题讨论】:

  • 我建议您需要一个非常好的理由来偏爱这种数据结构。你所拥有的要简单得多。也许你可以解释一下你想用它做什么以及为什么它对任何目的都会更好。
  • 我有另一个数据集,其中包含有关每个 study_id 的信息。我想在分析中使用这两个数据集,因此我尝试将其转换为宽数据集,然后将其与我现有的宽数据集合并。
  • 目前的结构仍然可以合并。在这两种结构中,定义观察的内容并不明显。您大概知道,但是在您的问题中很明显吗? (你可能看不到,但是有两个人在这里发布了答案然后又删除了它们,而且似乎都没有明确向你推荐什么。)
  • 我编辑了我的帖子,让我知道我还能做些什么来帮助澄清。另一个数据集相当大,有大约 300 个变量,理想情况下,我会将所有信息放在一个更大的数据集中。
  • 什么定义了观察?这对我来说仍然不清楚。

标签: stata reshape


【解决方案1】:

首先我要说的是,我永远不会选择按要求的方式组织我的数据,因此这不应被视为对这样做的支持。

话虽如此,但以下内容似乎可以解决问题。数据与您的数据相似,但我懒得处理完整日期,我只是在当月的某一天阅读。我发布这个是出于好奇,因为我以前从未见过需要连续两次reshape wide

clear
input study_id  date code
1  09  546
1  09  643
2  23  324
2  12  435
end
list
bysort study_id date (code): generate codenum = _n
reshape wide code, i(study_id date) j(codenum)
rename code* code_*_
list
bysort study_id (date): generate eventnum = _n
reshape wide date code_*, i(study_id) j(eventnum)
list

【讨论】:

  • rename 在 Stata 12 中进行了大幅修改,因此该语句在 10 中不起作用。
  • 谢谢,这很好用。我了解这不是存储数据的理想方式;您是否有其他方法可以推荐组合我拥有的两个数据集?鉴于一个很长,一个很宽。把宽的改成长的会更好吗?
  • 在这里和在 Statalist 上回答 Stata 问题的人几乎是不言而喻的,除了少数例外,Stata 使用长组织而不是广泛组织来更直接地完成复杂的分析相同的数据。所以我最初的反应是不要在整个数据集范围内重塑这个数据集。在不了解您的其他广泛数据集的情况下,我不会冒险猜测该数据集是否应该保持原样、重新整形或以某种方式汇总,然后再与现有的长数据集合并。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2019-11-22
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多