Stata参考变量按列号

时间:2014-09-26 21:00:26

标签: stata

我可以通过它们所在列的编号来引用变量吗?


这就是我想知道的原因:对于每次观察,我在欧几里德空间都有三个向量,所以我的列是

obsID | v1b1 v1b2 v2b1...v5b4 | tv1b1 tv1b2 tv2b1...tv5b4 | nv1b1 nv1b2 nv2b1...nv5b4

其中包含|只是为了便于阅读。我的变量名称看起来像上面那些,但我不知道提前命名模式。我可以将每个向量的长度设为ng = (c(k) - 1)/3,因此,如果我可以按列引用变量,则可以直接编写循环来查找欧几里德距离,例如,从v到{{1 }}

我知道还有其他方法可以计算欧几里德距离(比如重新整形数据;或者从nv中提取变量并对它们进行2/(ng+1)循环),但是如果有的话按列号引用变量的方法,我想知道。

2 个答案:

答案 0 :(得分:3)

我可以想象几种方式:

  1. 有些代码如

    sysuse auto, clear
    
    quietly ds
    local myvar `:word 5 of `r(varlist)''
    
    display "`myvar'"
    
    <do something with local myvar>
    

    将为您提供一种在不知道其名称的情况下使用第五个变量的方法。您可以使用循环并以这种方式定义变量列表。这基本上是来自http://www.stata.com/statalist/archive/2010-03/msg00073.html的回复。

  2. 将您的数据库转换为matrix并使用它。请参阅help svmathelp matrix

  3. 使用像st_varname()这样的Mata功能。请参阅help Matahelp mf_st_varname。另请参阅help m4_stata

  4. 但我没有遇到这种情况,这是一种自然的方式。

答案 1 :(得分:2)

这有两种方法(没有重命名变量和使用):

sysuse auto, clear

/* Without Renaming Variables */
unab varlist: _all
local K: word count `varlist'

forvalues v=1/`K' {
    local v`v': word `v' of `varlist'
    di "v`v' is `v`v''"
}


matrix dissim ED1 = `v2' `v12', L2 variables
matrix list ED1


/* Rename Variables */
rename * v#, renumber
matrix dissim ED2 = v2 v12, L2 variables
matrix list ED1