从distinct命令返回一个矩阵

Yan*_*ong 0 stata stata-macros

我对distinctStata中的命令有一个简单的问题.

当使用by前缀时,它是否可以返回一维矩阵r(N)

例如:

sysuse auto,clear
bysort foreign: distinct rep78
Run Code Online (Sandbox Code Playgroud)

我可以存储[2,1]矩阵,每行代表不同值的数量rep78吗?

该手册似乎表明它只存储最后一个值的不同值的数量.

Pea*_*cer 5

您可以轻松地为此创建自己的包装器:

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
Run Code Online (Sandbox Code Playgroud)

请注意,不同的观察数量存储在r(ndistinct),而不是r(N).

  • @YanSong如果你必须为不同的变量重复这样做,你可以将上面的内容包含在一个程序中.然后你只需要写一行. (2认同)