SAS:如何使用一个表中的结果根据第二个表中的匹配项进行搜索和计数

SAS:如何使用一个表中的结果根据第二个表中的匹配项进行搜索和计数,sas,enterprise-guide,Sas,Enterprise Guide,我试图将一份人员列表和索赔的提交次数以一种独特的组合放在一起 表A结构设置如下: PERSON_ID CLAIM_ID 123456 A123C 123456 Z321C 123456 B123C 111111 A123C 111111 Z321C PERSON_ID CLAIM_ID NUM_TIMES_CLAIMED 1

我试图将一份人员列表和索赔的提交次数以一种独特的组合放在一起

表A结构设置如下:

PERSON_ID CLAIM_ID 123456 A123C 123456 Z321C 123456 B123C 111111 A123C 111111 Z321C PERSON_ID CLAIM_ID NUM_TIMES_CLAIMED 123456 A123C 2 123456 Z321C 1 123456 B123C 3 111111 A123C 1 111111 Z321C 2
不知道为什么要使用循环来回答直接连接。现在,如果您首先将表B转换为更规范化的形式,就更容易了

首先将示例数据放入数据集中:

data A ;
length PERSON_ID CLAIM_ID $10 ;
input PERSON_ID    CLAIM_ID   ;
cards;
123456       A123C   
123456       Z321C   
123456       B123C   
111111       A123C   
111111       Z321C   
;;;;
data B ;
length PERSON_ID CLAIM_1 - CLAIM_3 $10 ;
input PERSON_ID    CLAIM_1-CLAIM_3   ;
cards;
123456       A123C      Z321C      B123C   
123456       A123C      B123C   .
123456       B123C . .  
111111       A123C      Z321C   .
111111       A321C ..
;;;;
然后只需连接表并计算匹配行的数量

proc sql ;
  create table want as 
    select a.*,count(*) as num_times_claimed
    from a 
    left join b
    on a.person_id = b.person_id 
    and (a.claim_id = b.claim_1
      or a.claim_id = b.claim_2
      or a.claim_id = b.claim_3
         )
    group by 1,2
    order by 1,2
  ;
quit;
proc print; run;
结果:

   PERSON_
     ID       CLAIM_ID    num_times_claimed

   111111      A123C          1
   111111      Z321C          1
   123456      A123C          2
   123456      B123C          3
   123456      Z321C          1

我认为您可以从“表A”中得到结果,假设所有声明都以行的形式插入到表A中,并且有重复的人名声明

SELECT  PERSON_ID, CLAIM_ID, COUNT(1)
FROM    [TABLE A] A
GROUP BY PERSON_ID, CLAIM_ID

如果没有,请描述您的表格结构以及它们之间的关系,以便我们能够帮助您。

表1与表2的关系如何?表1与表2的关系由个人提供谢谢您的回答!不过,我认为我的数据集描述不正确。表A包含了他们提交的人员和索赔的不同列表(约100万次观察)。表B包含了一个独特的人员列表,以及在同一时间(约4.5亿次观察)对哪些索赔进行了计费。这些人有能力一次提交多达25种不同的索赔。人均不同组合的平均数量为150,不同索赔ID的平均数量为34。我试图实现的是计算一个索赔以不同的索赔组合计费的次数。这听起来像是这段代码生成的次数。因此,如果A中的某个人在B中没有账单,那么计数将为0。否则,计数是B中的观察数。唯一的区别可能是相同的索赔id在B中的同一记录上出现两次。此查询将只计算一次。你是对的!一开始我没有看到,因为我觉得这是一个非常复杂的问题。谢谢编辑:不能对这些结果抱怨。VBA花了约6个小时。。。注意:创建了表摘要,共1914607行和3列。注意:使用的SQL过程(总处理时间):实时2:59.99 cpu时间1:54.16表A包含一个独特的人员列表和他们提交的声明(约100万次观察)。表B包含了一个独特的人员列表,以及在同一时间(约4.5亿次观察)对哪些索赔进行了计费。这些人有能力一次提交多达25种不同的索赔。人均不同组合的平均数量为150,不同索赔ID的平均数量为34。
   PERSON_
     ID       CLAIM_ID    num_times_claimed

   111111      A123C          1
   111111      Z321C          1
   123456      A123C          2
   123456      B123C          3
   123456      Z321C          1
SELECT  PERSON_ID, CLAIM_ID, COUNT(1)
FROM    [TABLE A] A
GROUP BY PERSON_ID, CLAIM_ID