如何在Stata中将长数据转换为宽数据?

状态

我有此数据:

id  test    test_date   value
1   A   02/06/2014 12:26    11
1   B   02/06/2014 12:26    23
1   C   02/06/2014 13:17    43
1   D   02/06/2014 13:17    65
1   E   02/06/2014 13:17    34
1   F   02/06/2014 13:17    64
1   A   05/06/2014 15:14    234
1   B   05/06/2014 15:14    646
1   C   05/06/2014 16:50    44
1   E   05/06/2014 16:50    55
2   E   05/06/2014 16:50    443
2   F   05/06/2014 16:50    22
2   G   05/06/2014 16:59    445
2   B   05/06/2014 20:03    66
2   C   05/06/2014 20:03    77
2   D   05/06/2014 20:03    88
2   E   05/06/2014 20:03    44
2   F   05/06/2014 20:19    33
2   G   05/06/2014 20:19    22

我想将此数据转换为如下所示的宽格式:

id    date              A   B   C   D   E   F   G
1   02/06/2014 12:26    11  23  43  65  34  64  .
1   05/06/2014 15:14    234 646 44  .   55  .   .
2   05/06/2014 16:50    .   .   .   .   443 22  445
2   05/06/2014 20:03    .   66  77  88  44  33  22

reshape在Stata中使用命令,但未产生所需的结果:

reshape wide test_date value, i(id) j(test) string

任何想法如何做到这一点?

更新:您是对的,我们需要此missvar。我尝试通过编程来创建它,但是失败了。假设在测试日期的2小时内,该批次将视为相同。我们只有7个测试(A,B,C,D,E,F,G)。首先,我尝试找出时差;

 bysort id: gen diff_bd = (test_date[_n] - test_date[_n-1])/(1000*60*60)    

 bysort id: generate missvar = _n if diff_bd <= 2 
罗伯托·费雷尔(Roberto Ferrer)

@jfeigenbaum提供了部分答案。

我看到的问题是您缺少标识相关子组的变量。这些子群体似乎受到test取值的限制A - G但是我可能是错的。

我已将此变量包含在示例数据集中,并将其命名为missvar我将这个变量强加到数据集中,认为它可以识别虽然隐含在原始帖子中但对您的分析很重要的组。

clear
set more off

*----- example data -----

input ///
id  str1 test    str30 test_date   value missvar
1   A   "02/06/2014 12:26"    11 1
1   B   "02/06/2014 12:26"    23 1
1   C   "02/06/2014 13:17"    43 1
1   D   "02/06/2014 13:17"    65 1
1   E   "02/06/2014 13:17"    34 1
1   F   "02/06/2014 13:17"    64 1
1   A   "05/06/2014 15:14"    234 2
1   B   "05/06/2014 15:14"    646 2
1   C   "05/06/2014 16:50"    44 2
1   E   "05/06/2014 16:50"    55 2
2   E   "05/06/2014 16:50"    443 1
2   F   "05/06/2014 16:50"    22 1
2   G   "05/06/2014 16:59"    445 1
2   B   "05/06/2014 20:03"    66 2
2   C   "05/06/2014 20:03"    77 2
2   D   "05/06/2014 20:03"    88 2
2   E   "05/06/2014 20:03"    44 2
2   F   "05/06/2014 20:19"    33 2
2   G   "05/06/2014 20:19"    22 2
end

gen double tdate = clock( test_date, "DM20Yhm")
format %tc tdate

drop test_date
list, sepby(id)

*----- what you want ? -----

reshape wide value, i(id missvar tdate) j(test) string
collapse (min) tdate value?, by(id missvar)

rename value* *

list

应该以某种方式以编程方式识别组。依靠数据的原始排序顺序是一种方法,但它可能不是最安全的方法。这可能是唯一的方法,但只有您知道。

编辑

关于您的评论和“缺失”变量,创建它的一种方法是:

// one hour is 3600000 milliseconds
bysort id (tdate): gen batch = sum(tdate - tdate[_n-1] > 7200000)

对于您的示例数据,这将创建一个batch与my相同变量missvar您还可以使用时间序列运算符。

让我强调,在介绍示例数据时,您需要格外小心。它必须代表真实的代码,否则您可能会得到不适合它的代码。其中包括您可能没有注意到它的原因,因为Stata没有给出任何错误。

例如,如果您在两个小时的限制内将相同的test应用于相同id的对象,则使用此代码(在中collapse将丢失信息(这不是示例数据中的问题。)

编辑2

针对评论中发现的另一个问题:

假设对人1进行了新观察,使得他在两个小时的限制内但在不同的时间接受了重复测试

1   A   "02/06/2014 12:26"    11 1 // old observation
1   B   "02/06/2014 12:26"    23 1
1   A   "02/06/2014 12:35"    99 1 // new observation
1   C   "02/06/2014 13:17"    43 1
1   D   "02/06/2014 13:17"    65 1
1   E   "02/06/2014 13:17"    34 1
1   F   "02/06/2014 13:17"    64 1
1   A   "05/06/2014 15:14"    234 2
1   B   "05/06/2014 15:14"    646 2
1   C   "05/06/2014 16:50"    44 2
1   E   "05/06/2014 16:50"    55 2

A12:26和进行测试12:35Reshape不会有任何问题,但是collapse会丢弃信息,因为它在id missvar组中取最小值请注意,对于该变量valueA,新信息(99)将丢失(所有其他变量也会发生这种情况,但是您明确希望放弃该信息)。在之后reshape但在collapse之前得到:

. list, sepby(id)

     +--------------------------------------------------------------------------------------------------+
     | id   missvar                tdate   valueA   valueB   valueC   valueD   valueE   valueF   valueG |
     |--------------------------------------------------------------------------------------------------|
  1. |  1         1   02jun2014 12:26:00       11       23        .        .        .        .        . |
  2. |  1         1   02jun2014 12:35:00       99        .        .        .        .        .        . |
  3. |  1         1   02jun2014 13:17:00        .        .       43       65       34       64        . |
  4. |  1         2   05jun2014 15:14:00      234      646        .        .        .        .        . |
  5. |  1         2   05jun2014 16:50:00        .        .       44        .       55        .        . |
     |--------------------------------------------------------------------------------------------------|
  6. |  2         1   05jun2014 16:50:00        .        .        .        .      443       22        . |
  7. |  2         1   05jun2014 16:59:00        .        .        .        .        .        .      445 |
  8. |  2         2   05jun2014 20:03:00        .       66       77       88       44        .        . |
  9. |  2         2   05jun2014 20:19:00        .        .        .        .        .       33       22 |
     +--------------------------------------------------------------------------------------------------+

运行完整的代码可以确认我们刚才所说的内容:

. list, sepby(id)

     +--------------------------------------------------------------------------+
     | id   missvar                tdate     A     B    C    D     E    F     G |
     |--------------------------------------------------------------------------|
  1. |  1         1   02jun2014 12:26:00    11    23   43   65    34   64     . |
  2. |  1         2   05jun2014 15:14:00   234   646   44    .    55    .     . |
     |--------------------------------------------------------------------------|
  3. |  2         1   05jun2014 16:50:00     .     .    .    .   443   22   445 |
  4. |  2         2   05jun2014 20:03:00     .    66   77   88    44   33    22 |
     +--------------------------------------------------------------------------+

现在假设对人1进行了一次新观察,以使他在两个小时的限制内但同时进行了一次重复测试

1   A   "02/06/2014 12:26"    11 1 // old observation
1   B   "02/06/2014 12:26"    23 1
1   A   "02/06/2014 12:26"    99 1 // new observation
1   C   "02/06/2014 13:17"    43 1
1   D   "02/06/2014 13:17"    65 1
1   E   "02/06/2014 13:17"    34 1
1   F   "02/06/2014 13:17"    64 1
1   A   "05/06/2014 15:14"    234 2
1   B   "05/06/2014 15:14"    646 2
1   C   "05/06/2014 16:50"    44 2
1   E   "05/06/2014 16:50"    55 2

然后,reshape将无法正常工作。斯塔塔抱怨:

变量test的值在id missvar tdate中不是唯一的

并有理由。该错误在发出问题信号时很明显。(如果不清楚,请返回help reshape并进行一些练习。)鉴于命令的功能,该请求没有任何意义。

最后,请注意,检查某些功能是否相对工作相对容易:只需尝试一下即可!在这种情况下,所需要做的就是稍微修改示例数据。如有必要,请返回帮助文件和手册。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当数据集很大时,如何在Stata中将宽型转换为长型

来自分类Dev

如何在熊猫中将长数据格式转换为宽数据格式

来自分类Dev

如何在Pandas中将宽日期数据转换为长格式

来自分类Dev

如何在Stata中重塑长而宽的数据?

来自分类Dev

在R中将数据帧从“宽”格式转换为“长”格式

来自分类Dev

在R中将带有计数的宽数据帧转换为长格式

来自分类Dev

将宽数据帧转换为长数据帧

来自分类Dev

如何在R中将数据集从宽格式转换为长格式

来自分类Dev

如何在R中将具有大量行的大文件从长格式转换为宽格式?

来自分类Dev

如何在Excel中将长表格转换为宽表格?-答案无效

来自分类Dev

宽到长数据转换

来自分类常见问题

在数据框中从长格式转换为宽格式

来自分类Dev

将分类数据从长格式转换为宽格式

来自分类Dev

在数据框中从长格式转换为宽格式

来自分类Dev

如何在R中将宽嵌套数据重塑为长格式?

来自分类Dev

如何在不转换Stata数据的情况下以相当长的格式将数据写入Excel?

来自分类Dev

使用substr在SAS中将宽数据转换为窄数据

来自分类Dev

如何在R中将xml数据转换为数据帧

来自分类Dev

如何在R中将xml数据转换为数据帧

来自分类Dev

使用melt()将宽数据转换为需要值查找的长数据格式

来自分类Dev

使用melt()将宽数据转换为需要值查找的长数据格式

来自分类Dev

在SQL中将数据从宽格式转换为长格式

来自分类Dev

如何在R中将表列表转换为数据框

来自分类Dev

如何在Ruby中将数据URI转换为文件

来自分类Dev

如何在python中将数据框转换为数组?

来自分类Dev

如何在R中将Json转换为数据帧

来自分类Dev

如何在Google表格中将这些数据转换为importhtml

来自分类Dev

如何在R中将数据集转换为特定方式

来自分类Dev

如何在pyspark中将密集向量转换为数据帧?

Related 相关文章

  1. 1

    当数据集很大时,如何在Stata中将宽型转换为长型

  2. 2

    如何在熊猫中将长数据格式转换为宽数据格式

  3. 3

    如何在Pandas中将宽日期数据转换为长格式

  4. 4

    如何在Stata中重塑长而宽的数据?

  5. 5

    在R中将数据帧从“宽”格式转换为“长”格式

  6. 6

    在R中将带有计数的宽数据帧转换为长格式

  7. 7

    将宽数据帧转换为长数据帧

  8. 8

    如何在R中将数据集从宽格式转换为长格式

  9. 9

    如何在R中将具有大量行的大文件从长格式转换为宽格式?

  10. 10

    如何在Excel中将长表格转换为宽表格?-答案无效

  11. 11

    宽到长数据转换

  12. 12

    在数据框中从长格式转换为宽格式

  13. 13

    将分类数据从长格式转换为宽格式

  14. 14

    在数据框中从长格式转换为宽格式

  15. 15

    如何在R中将宽嵌套数据重塑为长格式?

  16. 16

    如何在不转换Stata数据的情况下以相当长的格式将数据写入Excel?

  17. 17

    使用substr在SAS中将宽数据转换为窄数据

  18. 18

    如何在R中将xml数据转换为数据帧

  19. 19

    如何在R中将xml数据转换为数据帧

  20. 20

    使用melt()将宽数据转换为需要值查找的长数据格式

  21. 21

    使用melt()将宽数据转换为需要值查找的长数据格式

  22. 22

    在SQL中将数据从宽格式转换为长格式

  23. 23

    如何在R中将表列表转换为数据框

  24. 24

    如何在Ruby中将数据URI转换为文件

  25. 25

    如何在python中将数据框转换为数组?

  26. 26

    如何在R中将Json转换为数据帧

  27. 27

    如何在Google表格中将这些数据转换为importhtml

  28. 28

    如何在R中将数据集转换为特定方式

  29. 29

    如何在pyspark中将密集向量转换为数据帧?

热门标签

归档