我有以下数据:
---------------------------------
|Company | Item | 2012 | 2013 |
---------------------------------
| ABD | TA | 100 | 110 |
| ABD | EBIT | 200 | 220 |
| JKL | TA | 115 | 120 |
| JKL | EBIT | 250 | 270 |
其中Company
是特定公司的ID,Item
标识了2012年和2013年该公司的某些特定信息,如利润或资产。
我想将其转换为以下
---------------------------------
|Company | Year | TA | EBIT |
---------------------------------
| ABD | 2012 | 100 | 200 |
| ABD | 2013 | 110 | 220 |
| JKL | 2012 | 115 | 250 |
| JKL | 2013 | 120 | 270 |
我已经尝试{/ 1}}
了reshape
然而,这并没有奏效。
答案 0 :(得分:1)
永远不要只说某些“不起作用”。准确地说出发生了什么(在这种情况下,给出错误信息)并解释为什么它不是你想要的。
在您的情况下,2012
和2013
不可能是Stata变量名,因为没有Stata变量名可以以数字开头。如果2012
是允许的变量名称,那么Stata如何判断2012
是自己的意思还是具有相同名称的变量? (2012
和2013
可能是变量标签,但reshape
不适用于变量标签。)
在任何情况下,都不应为reshape
提供变量名称。它需要存根,如帮助中记录的那样。
我们无法看到您的变量名称。假设您有v2012
和v2013
。
clear
input str3 Company str4 Item v2012 v2013
ABD TA 100 110
ABD EBIT 200 220
JKL TA 115 120
JKL EBIT 250 270
end
reshape long v , i(Company Item) j(Year)
list
+-----------------------------+
| Company Item Year v |
|-----------------------------|
1. | ABD EBIT 2012 200 |
2. | ABD EBIT 2013 220 |
3. | ABD TA 2012 100 |
4. | ABD TA 2013 110 |
|-----------------------------|
5. | JKL EBIT 2012 250 |
6. | JKL EBIT 2013 270 |
7. | JKL TA 2012 115 |
8. | JKL TA 2013 120 |
+-----------------------------+
reshape wide v, i(Company Year) j(Item) string
renpfix v
list
+-----------------------------+
| Company Year EBIT TA |
|-----------------------------|
1. | ABD 2012 200 100 |
2. | ABD 2013 220 110 |
3. | JKL 2012 250 115 |
4. | JKL 2013 270 120 |
+-----------------------------+
请注意进一步解决您的问题。 i(Company)
不会有任何作用,因为每个标识符都有多个观察结果。您需要两次调用reshape
,因为需要long
才能获得不同年份的观察结果,并且需要wide
才能将不同的项目作为变量。
in this FAQ记录了频繁需要双reshape
的信息:Stata中的search reshape
会指向您。
如果您的变量名称不同,显然您的语法会有所不同。正如刚引用的常见问题解答中所述,您可能需要rename
变量才能reshape
。
注意:经过编辑,该计划被称为Stata,并且已有近30年的历史。任何告诉你的消息来源都不具有权威性。