Вернуть матрицу из отдельной команды
У меня есть простой вопрос о distinct
Команда в Стате.
При использовании с by
префикс, может ли он вернуть одномерную матрицу r(N)
?
Например:
sysuse auto,clear
bysort foreign: distinct rep78
Могу ли я хранить [2,1]
матрица, где каждая строка представляет количество различных значений rep78
?
Руководство, похоже, предполагает, что в нем хранится только количество различных значений последнего по значению.
2 ответа
Решение
Вы можете легко создать свою собственную обертку для этого:
sysuse auto,clear
sort foreign
levelsof foreign, local(foreign_levels)
local number_of_foreign_levels : word count `foreign_levels'
matrix distinct_mat = J(`number_of_foreign_levels', 1, 0)
forvalues i = 1 / `number_of_foreign_levels' {
quietly distinct rep78 if foreign == `i' - 1
matrix distinct_mat[`i', 1] = r(ndistinct)
}
matrix list distinct_mat
distinct_mat[2,1]
c1
r1 5
r2 3
Обратите внимание, что количество различных наблюдений хранится в r(ndistinct)
не r(N)
,
Вот еще один способ получить число различных значений в матрице.
. sysuse auto
(1978 Automobile Data)
. egen tag = tag(foreign rep78)
. tab foreign if tag, matcell(foo)
Car type | Freq. Percent Cum.
------------+-----------------------------------
Domestic | 5 62.50 62.50
Foreign | 3 37.50 100.00
------------+-----------------------------------
Total | 8 100.00