Вы не показываете полный и воспроизводимый код, который вызывает недоумение на форуме по программированию, но см. https://stackoverflow.com/help/mcve за советом по публикации хороших примеров.
Резервное копирование, ваша заявленная цель - это сумма корреляционной матрицы. Здесь я иллюстрирую использование correlate
: матрица доступна сразу после этой команды. Обратите внимание, что тот же метод применяется к корреляционной матрице, полученной любым другим способом, например, в вашем коде.
. sysuse auto, clear
(1978 Automobile Data)
. corr headroom trunk length turn displacement
(obs=74)
| headroom trunk length turn displa~t
-------------+---------------------------------------------
headroom | 1.0000
trunk | 0.6620 1.0000
length | 0.5163 0.7266 1.0000
turn | 0.4245 0.6011 0.8643 1.0000
displacement | 0.4745 0.6086 0.8351 0.7768 1.0000
. ret li
scalars:
r(N) = 74
r(rho) = .6620111289412028
matrices:
r(C) : 5 x 5
. mata : sum(st_matrix("r(C)"))
17.97943754
Итак, передайте матрицу в Mata, чтобы получить сумму.
Вы также можете передать его обратно.
Поскольку сумма матрицы является просто константой, она не обязательно должна храниться в переменной Stata, что также было бы расточительным. Может быть подходящим выбором скалярный или локальный макрос.
Чтобы показать последнюю точку: вы можете передать сумму обратно в Stata как скаляр:
. mata : st_numscalar("rsum", sum(st_matrix("r(C)")))
. di rsum
17.979438
Очевидно, вы также можете вычесть след, равный числу переменных, и разделите остаток. Вы можете остаться в Мате, чтобы сделать это, или сделать это в Стате.
Короче говоря, превращение матрицы корреляции в данные Stata является предотвратимой утечкой для вашей цели.