Stata里已经有了分组变量,如何确定每组里有多少个唯一的ID呢?
最开始遇到这个问题,我第一想到的是duplicates tag,但实验之后发现不行。于是写了很长一段代码,比如这样:
levelsof group_var,local(num)
local i=1
foreach v of local num{
preserve
keep if group_var==`v'
distinct id
gen ndistinct=r(ndistinct)
save data`i',replace
restore
local i=`i'+1
}
global N=`i'-1
use data1,clear
forvalue i=2/$N{
append using data`i'
}
思路很简单,就是把整个数据集按照分组变量(group_var)切割开,逐个去算每个组里有多少唯一的ID(使用distinct命令,ssc install distinct)。最后再把所有的子数据集再合并起来。可以说很麻烦了。
这个时候看到Statalist上有人说,可以考虑使用egenmore(ssc install egenmore),egenmore拓展了egen的功能,增加了更加丰富的运算。egenmore其实还是用egen的命令,比如前面的分组唯一ID的问题,可以这样写:
egen num=nvals(id),by(group_var)
egenmore里增加了很多个模块,包括:
Grouping and graphing
Strings, numbers and conversions
Dates, times and time series
Summaries and estimates
First and last