Вернуть матрицу из отдельной команды - PullRequest
0 голосов
/ 04 июня 2018

У меня простой вопрос о команде distinct в Stata.

При использовании с префиксом by может ли он возвращать одномерную матрицу r(N)?

Например:

sysuse auto,clear
bysort foreign: distinct rep78

Можно ли сохранить матрицу [2,1], где каждая строка представляет количество различных значений rep78?

Руководство, похоже, предполагает, что в нем хранится только количество различных значений последнего по значению.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вот еще один способ получить число различных значений в матрице.

. 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
0 голосов
/ 04 июня 2018

Вы можете легко создать свою собственную обертку для этого:

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).

...