首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多个组中查找唯一的ID数

在多个组中查找唯一的ID数
EN

Stack Overflow用户
提问于 2020-06-05 17:37:07
回答 4查看 112关注 0票数 2

我有一个数据集,里面有医生和他们工作的各种实践。我的数据集中的每个医生至少在1次实践中工作,但多达17次不同的实践。我想知道每一个工作的医生的独特数目。当前的数据集在SAS中,但我熟悉Python、Pandas和SQL。我很好地将数据转换成所需的任何格式,所以答案不需要在SAS代码中。

下面的示例数据集。这个样本显示A博士在实践中,P1,P3,和P5。E博士正在实践P1、P2和P5等。

从这张图表中,我想要一个新的列,列上每个人工作的唯一医生的总数。在这种情况下,A医生与其他2名医生合作(E &D)然而,如果我简单地按医生分组并进行总结,我发现A博士与6位医生一起工作。然而,这是错误的,因为它会数A医生3次(每列一次)和数E医生两次(他在A、P1和P5医生的两组练习中)

我有80万名医生,其中有40万名集体练习,使手工方法不可行。有谁对如何开始这件事有什么建议吗?

最后的输出如下:

示例数据集代码(用于SAS)

代码语言:javascript
运行
复制
input doctor $ tot_in_group group_practices $;
datalines;
A 2 P1
E 2 P1
C 3 P2
B 3 P2
E 3 P2
A 2 P3
D 2 P3

E 2 P5
A 2 P5
;
run;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-05 19:30:35

不包括自配对的组内的自我连接将生成每个组的所有配对的表。使用这一概念作为基础,为每一位医生计算不同的“伴侣”,而不是所有的小组。

要获得真正的唯一性,请确保您使用的是与每个个体不同的doctorId。试图阻止基于名字的“自我配对”是自找麻烦。(想想杜威医生、杜威医生和杜威医生--是的麻烦)

代码语言:javascript
运行
复制
data have;
input doctor $ group $;
datalines;
A P1
E P1
C P2
B P2
E P2
A P3
D P3
E P3
E P5
A P5
;
run;

proc sql;
  * demonstrate the combinatoric effect of who (P) paired with whom (Q) within group;
  * do not submit against the big data;

  create table works_with_each as
  select 
    P.doctor as P
  , Q.doctor as Q
  , P.group 
  from have as P
  join have as Q
    on P.group = Q.group
     & P.doctor ^= Q.doctor
  order by 
   P.doctor, Q.doctor, P.group
  ; 

  * count the distinct pairing, regardless of group;

  create table works_with_counts as
  select 
    P.doctor as P
  , count(distinct Q.doctor) as unique_work_with_count
  from have as P
  join have as Q
    on P.group = Q.group
     & P.doctor ^= Q.doctor
  group by 
   P.doctor
  order by 
   P.doctor
  ; 

每一个

唯一的对(工作)计数

票数 1
EN

Stack Overflow用户

发布于 2020-06-05 17:43:13

您可能需要在您的语言(特别是COUNT(DISTINCT var))中使用更多的查询来完成这个任务。

代码语言:javascript
运行
复制
SELECT docA , COUNT(DISTINCT docB) FROM 
    (SELECT A.doctor as docA, B.doctor as docB FROM mytable A JOIN mytable B
    ON A.group_practices = B.group_practices WHERE A.doctor > B.doctor)
GROUP BY docA

然后,您可以将此表加入到您前面展示的on doctor = docA表中。

docA>docB防止有:

  • A in relation with A
  • 或者有像A in relation in BB in relation with A这样的副本
票数 0
EN

Stack Overflow用户

发布于 2020-06-05 18:01:40

你可以自己加入和聚合:

代码语言:javascript
运行
复制
select t.doctor, count(distinct t1.doctor) no_coworkers
from mytable t
inner join mytable t1 on t1.doctor <> t.doctor and t1.group_practices = t.group_practices
group by t.doctor
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62221168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档