Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 以更紧凑的格式转换数据集(Stata)_Database_Stata - Fatal编程技术网

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个字符。确实存在一个叛逆的重复。谢谢你的帮助。