Stata 从distinct命令返回矩阵

Stata 从distinct命令返回矩阵,stata,stata-macros,Stata,Stata Macros,我有一个关于Stata中distinct命令的简单问题 当与by前缀一起使用时,它能否返回r(N)的一维矩阵 例如: sysuse auto,clear bysort foreign: distinct rep78 我是否可以存储一个[2,1]矩阵,每行表示rep78的不同值的数量 该手册似乎建议只按值存储最后一个的不同值的数量 您可以轻松创建自己的包装: sysuse auto,clear sort foreign levelsof foreign, loc

我有一个关于Stata中
distinct
命令的简单问题

当与
by
前缀一起使用时,它能否返回
r(N)
的一维矩阵

例如:

sysuse auto,clear
bysort foreign: distinct rep78
我是否可以存储一个
[2,1]
矩阵,每行表示
rep78
的不同值的数量


该手册似乎建议只按值存储最后一个的不同值的数量

您可以轻松创建自己的包装:

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,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

这里是另一种将不同值的数量放入矩阵的方法

. 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

distinct
是社区贡献的(用户编写的),因此它的文档是自己的帮助文件,而不是StataCorp制作的手册。@NickCox您是对的。我说得不准确。
distinct
是社区贡献的(用户编写的),所以它的文档是自己的帮助文件,而不是StataCorp制作的手册。@NickCox您是对的。我说的不准确。谢谢你的解决方案。我考虑过这一点,认为会有一个更简单的解决方案。@YanSong如果你必须对不同的变量重复这样做,你可以将上述内容包含到一个程序中。然后你只需要写一行。谢谢你的解决方案。我考虑过这一点,认为会有一个更简单的解决办法。@YanSong如果你必须对不同的变量重复这样做,你可以将上述内容包含到一个程序中。然后你只需要写一行。