使用折叠计算字符串变量值的出现次数

时间:2017-12-03 12:16:27

标签: string count stata collapse

在如下所示的数据集中

clear
input patid str2 dx 
1   qw
1   qe
1   qw
2   qw
2   qw
2   qs
2   qs
3   qe
3   qe
3   qs
3   qw
3   qw
3   qw
3   qs
4   qe
5   qa
5   qs
5   qw
5   qe
5   qw
end

我发现我可以使用下标[1]计算字符串变量dx的每个值的出现次数,或者如果使用dx我将collapse转换为数字标签[2]。

在使用collapse时,是否有命令或语法可以直接计算字符串变量本身的出现次数(没有转换等)?

e.g。如果我尝试collapse (count) countdx=dx, by(patid dx),则会返回错误消息variable dx not found

(当然,这不应该有效:当我尝试collapse (count) countdx=dx, by(patid)时,会返回错误type mismatch

注意:

[1]

by patid dx, sort: egen ndx = count(dx)
by patid dx: g orderdx=_n
by patid dx: drop if orderdx>1

[2]

g numdx=.
replace numdx=1 if dx=="qa"
replace numdx=2 if dx=="qe"
replace numdx=3 if dx=="qs"
replace numdx=4 if dx=="qw"
collapse (count)  countdx=numdx, by(patid dx)

1 个答案:

答案 0 :(得分:2)

您的示例,但不是您的问题,都意味着您要为标识符patid的每个不同值单独计算。

clear
input patid str2 dx 
1   qw
1   qe
1   qw
2   qw
2   qw
2   qs
2   qs
3   qe
3   qe
3   qs
3   qw
3   qw
3   qw
3   qs
4   qe
5   qa
5   qs
5   qw
5   qe
5   qw
end

bysort patid dx : gen count = _N 

tabdisp patid dx , c(count) 

----------------------------------
          |           dx          
    patid |   qa    qe    qs    qw
----------+-----------------------
        1 |          1           2
        2 |                2     2
        3 |          2     2     3
        4 |          1            
        5 |    1     1     1     2
----------------------------------

有关该地区技术的评论,请参阅this paper。在Statalist中搜索dm0042的提及会找到很多相关的例子。

对于中等大小的问题,tabdisp不会特别实用。这里提到直接显示上一个命令的作用。

将其扩展为collapse,一个简单的设备是

gen one = 1

collapse (sum) one, by(patid dx)

虽然我应该提到contract是为了这个目的更明确地写的(参见Cox 1998中对其前身的讨论)。

另一方面,如果您确实创建了count变量,那么

collapse (mean) count, by(patid dx) 

会产生完全相同的效果。

Cox,N.J。1998.将数据集折叠到频率。 Stata技术公告 44:2-3。 .pdf here