我正在看一些代码,想知道这是怎么做的。下面是代码注释。即使代码注释,我仍然不确定该代码做什么。我使用过数组,但对这段代码不熟悉。看起来此代码通过使用两个索引进行了重复数据删除。那是对的吗?因此,如果同时使用CCS_DR_IDX和TXN_IDX,它将删除这些记录吗?
现在处理美元匹配的情况。如果已经使用ccs_dr_idx,则删除该记录。此处丢失的txns将重新添加,其中包含称为Missing的索赔数据。
PROC SORT DATA=OUT.REQ_1_9_F_AMT_MATCH; BY CCS_DR_IDX DATEDIF; RUN;
DATA OUT.REQ_1_9_F_AMT_MATCH_V2;
SET OUT.REQ_1_9_F_AMT_MATCH;
ARRAY id_one{40000} id_one1-id_one40000;
ARRAY id_two{40000} id_two1-id_two40000;
RETAIN id_one1-id_one40000 id_two1-id_two40000;
IF _n_=1 then i=1;
else i+1;
do j=1 to i;
if CCS_DR_IDX=id_one{j} then delete;
end;
do k = 1 to i;
if TXN_IDX = id_two{k} then delete;
end;
id_one{i}=CCS_DR_IDX;
id_two{i}=TXN_IDX;
drop i j k id_one1-id_one40000 id_two1-id_two40000;
run;
答案 0 :(得分:0)
排序是
BY CCS_DR_IDX DATEDIF;
当控制到达数据步骤的底部并隐式OUTPUT
时,发生过滤或选择。仅当CCS_DR_IDX
和 TXN_IDX
是以前都没有出现的组合时,这种情况才会发生。
由于您已按CCS_DR_IDX
进行排序,因此您可以知道存在隐式分组,并且每个CCS_DR_IDX
输出中最多会有一个记录,对于第一个组,它必须是该组中的第一条记录。 CCS_DR_IDX
组中的每个连续行(输出后)将与id_one
中的条目匹配,并被DELETE
抛弃。
当您开始处理下一个CCS_DR_IDX
组时,将处理行,直到相对于TXN_ID
中跟踪的行,到达下一个不同的id_two
。因为排序具有第二个键DATDIF
,所以您可以说输出是“唯一对项CCS_DR_IDX
TXN_ID
的第一个出现组合的选择” (有点类似于没有重复的配对采样。)
在某些情况下,某些CCS_DR_IDX
不会出现在输出中-当该组仅包含在先前TX_ID
中发生的CCS_DR_IDX
个时,就会发生这种情况。
在没有看到数据模型和组合原因(可能是某种笛卡尔联接)的情况下,很难对所选择的内容做出比较模糊的陈述。