Stata-有没有一种像Python那样存储数据的方法';是字典还是散列图?

Stata-有没有一种像Python那样存储数据的方法';是字典还是散列图?,stata,Stata,有没有一种类似于Python中的字典或其他语言中的哈希映射的方法来在Stata中存储信息 我正在遍历附加有_1、_2、_3、_4、_5、_6、_7_18来描述各个部分,我想求出字母“DK”在每个部分的每个变量中出现的次数之和。现在我有18个for循环,每个循环迭代一个不同的部分,将DK总数的“和”保存在一个新变量DK_1sum,DK_2sum中,然后我生成该数据的图形 我想知道是否有一种方法可以将所有这些转换为一个大的For循环,并将数据附加到一个字典/数组中,使数据看起来像: {s1Sum,

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

我正在遍历附加有_1、_2、_3、_4、_5、_6、_7_18来描述各个部分,我想求出字母“DK”在每个部分的每个变量中出现的次数之和。现在我有18个for循环,每个循环迭代一个不同的部分,将DK总数的“和”保存在一个新变量DK_1sum,DK_2sum中,然后我生成该数据的图形

我想知道是否有一种方法可以将所有这些转换为一个大的For循环,并将数据附加到一个字典/数组中,使数据看起来像:

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

这可能吗?

这可能存储在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

如果你关心效率,你可以考虑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'"

明亮的我会试试这个,然后再打给你。以前没有见过标量。我添加了一个
变量,它
变量。否则,哪一个值可能会被稍后的数据排序所扰乱。这两种方法的效率有实质性差异吗?哪一个跑得更快?一个大胆的猜测是,两者之间不会有什么区别。