我正在尝试整理一份人员列表以及以独特组合提交申请的次数。
表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 - Isoloate单个人不同的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;
答案 0 :(得分: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
答案 1 :(得分:0)
我认为您可以从“表A”获得结果,假设所有声明都以行的形式插入到表A中,并且对于person_id存在重复声明。
intent1.putExtras("blabla",bundles);
如果没有,请描述您的表格结构和它们之间的关系,以便我们为您提供帮助。