2

有没有一种方法可以在 Stata 中存储类似于 Python 中的字典或其他语言中的哈希映射的信息?

我正在遍历附加有 _1、_2、_3、_4、_5、_6、_7 ... _18 的变量列表来描绘部分,我想总结字母“DK”出现在每个变量中的次数每个部分。现在我有 18 个 for 循环,每个循环遍历不同的部分,将 DK 总数的“总和”保存在一个名为 DK_1sum、DK_2sum 的新变量中,然后我稍后会生成该数据的图表。

我想知道是否有办法将所有这些变成一个大的 For 循环,并将数据附加到字典/数组中,这样数据看起来像:

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

这可能吗?

4

2 回答 2

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
于 2013-10-02T14:38:18.443 回答
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'"
于 2016-08-09T22:52:38.133 回答