答案 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