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

String 使用折叠计算字符串变量值的出现次数,string,count,stata,collapse,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每个值的出现次数,或者如果我使用collapse[2]将dx转换为数字标签 在使用折叠时,

在下面这样的数据集中

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
每个值的出现次数,或者如果我使用
collapse
[2]将
dx
转换为数字标签

在使用
折叠时,是否有一个命令或语法可以直接从字符串变量本身计算出现次数(无需转换等)

e、 g.如果我尝试按(patid dx)
折叠(计数)countdx=dx,则返回错误消息
变量dx未找到

(当然,这不应该起作用:当我尝试按(patid)折叠(count)countdx=dx时,返回错误
类型不匹配

注:

[1]

[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
----------------------------------
有关此领域的技术回顾,请参阅。搜索有关
dm0042
的内容会找到很多相关示例

即使是中等规模的问题,
tabdisp
也不会特别实用。这里提到它是为了直接显示前一个命令的作用

将此扩展到折叠,一个简单的设备是

gen one = 1

collapse (sum) one, by(patid dx)
尽管我应该提到,
合同
是为了这个目的而更明确地编写的(参见1998年考克斯对其前身的讨论)

另一方面,如果确实创建了
count
变量,则

collapse (mean) count, by(patid dx) 
将产生完全相同的效果

考克斯,纽约州,1998年。正在将数据集折叠为频率。Stata技术公告44:2-3

gen one = 1

collapse (sum) one, by(patid dx)
collapse (mean) count, by(patid dx)