更新具有不同名称的多个列的列中的结果

时间:2017-03-31 13:06:19

标签: stata

enter image description here

根据图片,我想循环遍历列以找到文本mo的位置。它使用结果而不是文本mo更新mo。挑战在于如何在与mo不同的下一列中选择结果。

1 个答案:

答案 0 :(得分:1)

您对上述评论的回答向我表明,您提出的问题反映了解决更大问题的错误方法。您的描述表明您对不同数量的testname / testvalue对进行了观察,例如

  +----------------------------------------+
  | id   day   test1   val1   test2   val2 |
  |----------------------------------------|
  |  A     1      mo     11              . |
  |  A     2      mo     12      df   98.2 |
  |----------------------------------------|
  |  B     1      df   98.3      mo     23 |
  |  B     2      mo     14              . |
  +----------------------------------------+

你的目标是制作看起来像这样的观察

  +----------------------+
  | id   day     df   mo |
  |----------------------|
  |  A     1      .   11 |
  |  A     2   98.2   12 |
  |----------------------|
  |  B     1   98.3   23 |
  |  B     2      .   14 |
  +----------------------+

如果是这种情况,这里有一个可重复的示例,您可以复制,粘贴到Stata的Do-file Editor窗口,执行它,并检查输出以查看该技术如何避免您引入的所有复杂性通过尝试使用循环来完成任务。 reshape命令是Stata最强大的数据管理工具之一,它将帮助您学习如何使用它。

clear
input str8 id int day str8 test1 float val1 str8 test2 float val2
A 1 "mo" 11 "" .
A 2 "mo" 12 "df" 98.2
B 1 "df" 98.3 "mo" 23
B 2 "mo" 14 "" .
end
list, sepby(id) noobs
reshape long test val, i(id day) j(num)
drop if missing(test)
drop num
list, sepby(id) noobs
reshape wide val, i(id day) j(test) str
rename val* *
list, sepby(id) noobs