使用后续值从变量创建矩阵

问题描述

我在 Stata 中有 3 个变量的数据,一个字符串 id 和数字变量(GPS 数据 - 纬度和经度)。我想通过以下方式(下表)将变量转换为矩阵,以计算所有组合的两个 id-spots 之间的距离。因此,新创建的后续列(例如,id_1)具有原始变量(例如,id)的后续 (i+1) 值,依此类推。但是,以下命令仅在到达第 n 行以获取值时才有效;然后随后的新行变为空。因此,矩阵的下半部分丢失(上表:///)。对于 2000 次观察:

foreach num of numlist 1/2000 {
   foreach var of varlist id num1 num2   {
        gen `var'_`num'=`var'[_n+`num']
    }
}

enter image description here

解决方法

如果有人发现任何用途,我会发布答案。

//duplicate all observation to create all filled matrix

expand 2,gen(dupindex) 

forvalue i = 1/1999 {
    foreach var of varlist id num1 num2 {
    gen `var'`i'=`var'[_n+`i']
        }
}

//delete the unnecessary columns & rows

forvalue i = 2000/3999 {
    drop id`i' num1`i' num2`i'  
}
drop in 2001/3999
drop dupindex