Вернуть матрицу из отдельной команды

У меня есть простой вопрос о 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
Другие вопросы по тегам