2013-10-02 26 views
2

有沒有辦法將信息存儲在Stata中,類似於Python中的字典或其他語言的哈希映射?Stata-有沒有一種方法來存儲像Python的字典或散列圖的數據?

我通過附加了_1,_2,_3,_4,_5,_6,_7 ... _18的變量列表迭代劃分部分,我想總結字母「DK」出現的次數在每個部分的每個變量中。現在我有18個for循環,每個循環遍歷一個不同的部分,將DK總數的'sum'保存在一個名爲DK_1sum,DK_2sum的新變量中,然後我生成該數據的圖形。

我想知道是否有辦法把所有這一切變成一個大的for循環中,而只是將數據追加到詞典/陣列,使得數據的模樣:

{s1Sum, 25 
s2Sum, 56 ... 
s18Sum, 101} 

這是可能的?

回答

3

這可以存儲在一個Stata矩陣,一個Mata矩陣或只是普通的Stata變量。

gen count = . 
gen which = _n 
qui forval j = 1/18 { 
    scalar found = 0 
    foreach v of var *_`j' { 
      count if strpos(`v', "DK") 
      scalar found = scalar(found) + r(N) 
    } 
    replace count = scalar(found) in `j' 
} 
list which count in 1/18 

對於變異,這裏是一個Stata矩陣方法。

matrix count = J(18,1,.) 
qui forval j = 1/18 { 
    scalar found = 0 
    foreach v of var *_`j' { 
      count if strpos(`v', "DK") 
      scalar found = scalar(found) + r(N) 
    } 
    matrix count[`j', 1] = scalar(found) 
} 
matrix list count 
+0

輝煌。我會嘗試這個並回復你。以前沒有看過標量。 – Parseltongue

+0

我添加了一個'which'變量。否則,哪個值可以通過稍後對數據進行排序而被擾亂。 –

+0

這兩種方法之間的效率是否存在實質性差異?哪個會跑得更快? – Parseltongue

0

如果您關心效率問題,可以考慮Mata的關聯數組功能。

* associate Y with X 
local yvalue "Y" 
mata : H = asarray_create() 
mata : asarray(H, "X", st_local("yvalue")) 
* available in Mata 
mata : asarray(H, "X") 
* available in Stata 
mata : st_local("xvalue", asarray(H, "X")) 
di "`xvalue'" 
相關問題