0

我正在尝试汇总人员列表以及以独特组合提交索赔的次数。

表A结构设置如下:

     PERSON_ID CLAIM_ID   
     123456 A123C   
     123456 Z321C   
     123456 B123C   
     111111 A123C   
     111111 Z321C   

表B结构设置如下:

     PERSON_ID CLAIM_1 CLAIM_2 CLAIM_3   
     123456 A123C Z321C B123C   
     123456 A123C B123C   
     123456 B123C   
     111111 A123C Z321C   
     111111 A321C

我需要产生的结果是这样的:

     PERSON_ID CLAIM_ID NUM_TIMES_CLAIMED   
     123456 A123C 2   
     123456 Z321C 1   
     123456 B123C 3   
     111111 A123C 1   
     111111 Z321C 2   

我可以在 MSAccess 中使用带有打开记录集的循环来执行此操作,并且我尝试研究如何打开 SAS 记录集以循环(宏)它,但我似乎无法弄清楚如何正确实现它。

有任何想法吗?

编辑
我认为我必须采取的步骤是:

第 1 步 - 隔离 CLAIM_ID 的单个人不同列表
第 2 步 - 对于每个 CLAIM_ID,扫描 25 个变量以找到匹配
第 3 步 - 每次找到匹配时计数
第 4 步 - 保存观察结果(PERSON_ID、CLAIM_ID、NUM_TIMES_CLAIMED)

从 VBA 到 SAS,我似乎无法隔离单个人的不同声明列表并在遍历表 B 中的 25 个变量中的每一个时遍历它们

以下是我用来评估一项索赔是否与另一项索赔计费的方法,我认为我需要以某种方式自动化:

data LOCALPC.SEL_ASMT_DEL;
  SET LOCALPC.FY2014_CC_FINAL;
    ARRAY FSC{25} $ FSC1-FSC25;
    DO I = 1 TO 25;
        IF FIND (FSC{I},'A123A') THEN 
            DO N = I+11 TO 25;
                IF FIND (FSC{J},'Z321A') THEN
                    OUTPUT;
            END;
    END;
RUN;
4

2 回答 2

0

不知道为什么你会使用循环来回答直接连接。现在,如果您首先将表 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
于 2015-11-03T01:20:33.820 回答
0

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

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

如果没有,请描述您的表结构和它们之间的关系,以便我们为您提供帮助。

于 2015-11-03T01:40:35.687 回答