如何在stata中巧妙地将类协方差表转换为一对一?

如何在stata中巧妙地将类协方差表转换为一对一?,stata,data-manipulation,Stata,Data Manipulation,我遇到了一个关于使用Stata进行数据管理的实际问题。我计划做的是在30个省会之间创建不同的球面距离,这样中国就有大约870个相同的值。有一些用户编写的命令通过谷歌地图来处理这个问题,但我的问题是,出于某种保密原因,数据存储在一台与互联网断开连接的孤立计算机中,因此我必须在do文件中定义所有一对一距离值,然后将它们合并到数据中。考虑到非竞争性的工作量(虽然不是真的不可行),我想知道是否有一些聪明的方法来完成这项工作。我有一个excel工作表,其中的距离就像协方差矩阵,省会首都的名字出现在第一行和

我遇到了一个关于使用Stata进行数据管理的实际问题。我计划做的是在30个省会之间创建不同的球面距离,这样中国就有大约870个相同的值。有一些用户编写的命令通过谷歌地图来处理这个问题,但我的问题是,出于某种保密原因,数据存储在一台与互联网断开连接的孤立计算机中,因此我必须在do文件中定义所有一对一距离值,然后将它们合并到数据中。考虑到非竞争性的工作量(虽然不是真的不可行),我想知道是否有一些聪明的方法来完成这项工作。我有一个excel工作表,其中的距离就像协方差矩阵,省会首都的名字出现在第一行和第一列,它就像一个较低的三角形矩阵。代表价值观

      A         B          C           D            E                     AD           
            capital_1  capital_2  capital_3  capital_4    ······    capital_30
1 capital_1 
2 capital_2    '
3 capital_3    '           '
4 capital_4    '           '           '
  ········

  capital_30   '           '           '         '  

我知道如何导入这样的martrix,但我可以生成所需的一对一对吗?谢谢。

谢谢@Roberto的有益建议,我已经部分解决了这个问题,我提出我的解决方案是为了让任何可能遇到类似问题的新手受益,并希望从真正的专家那里受益以改进我的代码

//import data from excel file
import excel using distance.xls
*********************************
* rename the variable name
* (to make it more well orgnized to facilitie use of --reshape-- command
*********************************
* rename the first column
ren A id
* rename the following variables
local i=0
foreach var of varlist B-AF {
    local j=`i'+1
    local i=`i'+1
    ren `var' distance`j'
}

*********************************
* reshape the data
*********************************
reshape long distance,i(id) j(city)
tostring city,replace
***the following part is really urgly, because I don't know how 
*to gen a one-to-one mapping between orginal province name and
*the new generated variable name like distance`j',I have to recover
*them by hand, I hope someone can help me to improve this part**
replace city="北京" if city=="1"
replace city="天津" if city=="2"
replace city="河北" if city=="3"
replace city="山西" if city=="4"
replace city="内蒙古" if city=="5"
replace city="辽宁" if city=="6"
replace city="吉林" if city=="7"
·····

重塑有用吗?是的。你试过了吗?你有什么问题吗,如果有的话?只是重申一下:一个标准的长时间重塑应该在这里起作用。如果你对此有问题,请报告。如果是这样的话,请给我们一些代码和您的尝试,并清楚地描述问题。谢谢您的善意提醒,罗伯托。我正在学习重塑右行的语法。在实际实施之前,我想到了两个可能的困难。第一个是我的行名是汉字省会名,省会名只是为了说明,我不认为在示例中使用汉字是有意义的,但它们是真实的数据,所以你可以看到它远不像stata示例中的inc80、inc81、inc82那样组织良好。第二个是我处理的数据结构是一个较低的三角形矩阵,而不是一个平衡面板或symmetrix矩阵,因此,当我使用命令restrape long时,我可能会从较高的三角形部分获取缺少的值。我希望我能展示真实的数据结构,但我的声誉还不够