我可以通过它们所在列的编号来引用变量吗?
这就是我想知道的原因:对于每次观察,我在欧几里德空间都有三个向量,所以我的列是
obsID | v1b1 v1b2 v2b1...v5b4 | tv1b1 tv1b2 tv2b1...tv5b4 | nv1b1 nv1b2 nv2b1...nv5b4
其中包含|
只是为了便于阅读。我的变量名称看起来像上面那些,但我不知道提前命名模式。我可以将每个向量的长度设为ng = (c(k) - 1)/3
,因此,如果我可以按列引用变量,则可以直接编写循环来查找欧几里德距离,例如,从v
到{{1 }}
我知道还有其他方法可以计算欧几里德距离(比如重新整形数据;或者从nv
中提取变量并对它们进行2/(ng+1)
循环),但是如果有的话按列号引用变量的方法,我想知道。
答案 0 :(得分:3)
我可以想象几种方式:
有些代码如
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的回复。
将您的数据库转换为matrix
并使用它。请参阅help svmat
和help matrix
。
使用像st_varname()
这样的Mata功能。请参阅help Mata
和help mf_st_varname
。另请参阅help m4_stata
。
但我没有遇到这种情况,这是一种自然的方式。
答案 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