2014-09-26 74 views
1

我可以通過它們所在列的編號來引用變量嗎?Stata參考變量按列號


這也是爲什麼我想知道:對於每個觀察,我對歐氏空間三個矢量,所以我列

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

其中|包含僅爲可讀性。我的變量名稱看起來像上面那些,但我不知道提前命名模式。我可以得到每個向量的長度爲ng = (c(k) - 1)/3,所以如果我可以按列來引用變量,那麼直接寫一個循環來找到歐幾里得距離,例如從vnv

我知道有其他的方法去計算歐幾里得距離(如整形的數據;或者從2/(ng+1)提取varnames並對其做了foreach環),但如果是引用的列數變量的方式,我想知道它。

+2

以下是有關該主題的舊[post](http://www.stata.com/statalist/archive/2010-03/msg00073.html)。這個解決方案基本上是用'ds'順序檢索變量列表,然後通過'loc v'v''引用第i個變量:'r(varlist)'的單詞'i'或' 'loc v = word(「'r(varlist)'」,'i')''。 – 2014-09-26 21:50:53

回答

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

但我還沒有遇到過這種情況,這是一種很自然的方式。

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