Database 以更紧凑的格式转换数据集(Stata)
最初,我处理的数据集类似于:Database 以更紧凑的格式转换数据集(Stata),database,stata,Database,Stata,最初,我处理的数据集类似于: +------+--------+-----------+-------+ |日期|地理|变量|值| +------+--------+-----------+-------+ |1981年|加拿大|瓦尔1 | || |1982年|加拿大|瓦尔1 | || |1983年|加拿大|瓦尔1 | || | ... | ... | ... | ... | |2015年|加拿大| var2 || |1981年|加拿大|瓦尔2 | || |1982年|
+------+--------+-----------+-------+
|日期|地理|变量|值|
+------+--------+-----------+-------+
|1981年|加拿大|瓦尔1 | ||
|1982年|加拿大|瓦尔1 | ||
|1983年|加拿大|瓦尔1 | ||
| ... | ... | ... | ... |
|2015年|加拿大| var2 ||
|1981年|加拿大|瓦尔2 | ||
|1982年|加拿大|瓦尔2 | ||
| ... | ... | ... | ... |
|2015年|加拿大| var2 ||
|1981年|魁北克|瓦尔1 | ||
|1982年|魁北克|瓦尔1 | ||
|1983年|魁北克|瓦尔1 | ||
| ... | ... | ... | ... |
|2015年|魁北克|瓦尔2 | ||
|1981年|魁北克|瓦尔2 | ||
|1982年|魁北克|瓦尔2 | ||
| ... | ... | ... | ... |
|2015年|魁北克|瓦尔2 | ||
+------+--------+-----------+-------+
如果没有样本数据,我的答案将无法测试。我认为下面的内容会让你朝着正确的方向开始
reshape wide value, i(date geo) j(variables) string
请注意,这假定变量的内容适合用作变量名。例如,变量的1potato
值将是一个问题
无论如何
help reshape
应该是你的第一站
作为对评论的回应添加:以下是我编造的一些数据和一个演示,重塑
对这些数据有效。也许你可以解释一下这些数据与真实数据的区别。您的错误消息表明,对于日期和地理位置的某些组合,变量的特定值会多次出现
. list, sepby(geo)
+----------------------------------+
| date geo variab~s value |
|----------------------------------|
1. | 1981 Canada var1 111 |
2. | 1982 Canada var1 211 |
3. | 1983 Canada var1 311 |
4. | 1981 Canada var2 112 |
5. | 1982 Canada var2 212 |
6. | 1983 Canada var2 312 |
|----------------------------------|
7. | 1981 Quebec var1 121 |
8. | 1982 Quebec var1 221 |
9. | 1983 Quebec var1 321 |
10. | 1981 Quebec var2 122 |
11. | 1982 Quebec var2 222 |
12. | 1983 Quebec var2 322 |
+----------------------------------+
. reshape wide value, i(geo date) j(variables) string
(note: j = var1 var2)
Data long -> wide
-----------------------------------------------------------------------------
Number of obs. 12 -> 6
Number of variables 4 -> 4
j variable (2 values) variables -> (dropped)
xij variables:
value -> valuevar1 valuevar2
-----------------------------------------------------------------------------
. rename (value*) (*)
. list, sepby(geo)
+-----------------------------+
| date geo var1 var2 |
|-----------------------------|
1. | 1981 Canada 111 112 |
2. | 1982 Canada 211 212 |
3. | 1983 Canada 311 312 |
|-----------------------------|
4. | 1981 Quebec 121 122 |
5. | 1982 Quebec 221 222 |
6. | 1983 Quebec 321 322 |
+-----------------------------+
.
如果没有样本数据,我的答案将无法测试。我认为下面的内容会让你朝着正确的方向开始
reshape wide value, i(date geo) j(variables) string
请注意,这假定变量的内容适合用作变量名。例如,变量的1potato
值将是一个问题
无论如何
help reshape
应该是你的第一站
作为对评论的回应添加:以下是我编造的一些数据和一个演示,重塑
对这些数据有效。也许你可以解释一下这些数据与真实数据的区别。您的错误消息表明,对于日期和地理位置的某些组合,变量的特定值会多次出现
. list, sepby(geo)
+----------------------------------+
| date geo variab~s value |
|----------------------------------|
1. | 1981 Canada var1 111 |
2. | 1982 Canada var1 211 |
3. | 1983 Canada var1 311 |
4. | 1981 Canada var2 112 |
5. | 1982 Canada var2 212 |
6. | 1983 Canada var2 312 |
|----------------------------------|
7. | 1981 Quebec var1 121 |
8. | 1982 Quebec var1 221 |
9. | 1983 Quebec var1 321 |
10. | 1981 Quebec var2 122 |
11. | 1982 Quebec var2 222 |
12. | 1983 Quebec var2 322 |
+----------------------------------+
. reshape wide value, i(geo date) j(variables) string
(note: j = var1 var2)
Data long -> wide
-----------------------------------------------------------------------------
Number of obs. 12 -> 6
Number of variables 4 -> 4
j variable (2 values) variables -> (dropped)
xij variables:
value -> valuevar1 valuevar2
-----------------------------------------------------------------------------
. rename (value*) (*)
. list, sepby(geo)
+-----------------------------+
| date geo var1 var2 |
|-----------------------------|
1. | 1981 Canada 111 112 |
2. | 1982 Canada 211 212 |
3. | 1983 Canada 311 312 |
|-----------------------------|
4. | 1981 Quebec 121 122 |
5. | 1982 Quebec 221 222 |
6. | 1983 Quebec 321 322 |
+-----------------------------+
.
嗨,我非常愿意提供一些样本数据,但我不知道如何做到这一点。我尝试了你的建议,这给了我以下错误信息:变量值在日期geo内不唯一
。为了记录在案,在问这个问题之前,我尝试了所有可能的重塑
命令组合,但没有成功。谢谢你的帮助。你说得对,应该有用。这意味着数据有问题。我可以把有问题的.dta文件发送给您吗?我看到的一个可能的问题是,“variables”中的名称不是“var1,var2,…”,而是相当长,并且包含空格。这会导致问题吗?否则,我如何检查,如您所说的“对于日期和地理位置的某些组合,特定变量值是否不止一次出现”?再次感谢。这是一个不同的问题,您应该在另一个线程中询问(虽然可能是重复的)duplicates
命令将帮助查找重复项,然后您必须决定如何处理,而strtoname()
函数可能有助于处理变量名。我会在restrape-wide
之前rename value v_
,以确保restrape
创建的新变量名不超过32个字符。确实存在一个叛逆的重复。谢谢你的帮助。嗨,我非常愿意提供一些样本数据,但我不知道怎么做。我尝试了你的建议,这给了我以下错误信息:变量值在日期geo内不唯一
。为了记录在案,在问这个问题之前,我尝试了所有可能的重塑
命令组合,但没有成功。谢谢你的帮助。你说得对,应该有用。这意味着数据有问题。我可以把有问题的.dta文件发送给您吗?我看到的一个可能的问题是,“variables”中的名称不是“var1,var2,…”,而是相当长,并且包含空格。这会导致问题吗?否则,我如何检查,如您所说的“对于日期和地理位置的某些组合,特定变量值是否不止一次出现”?再次感谢。这是一个不同的问题,您应该在另一个线程中询问(虽然可能是重复的)duplicates
命令将帮助查找重复项,然后您必须决定如何处理,而strtoname()
函数可能有助于处理变量名。我会在restrape-wide
之前rename value v_
,以确保restrape
创建的新变量名不超过32个字符。确实存在一个叛逆的重复。谢谢你的帮助。