SAS,数组代码,两个索引,删除记录

时间:2018-10-16 20:50:09

标签: arrays sas

我正在看一些代码,想知道这是怎么做的。下面是代码注释。即使代码注释,我仍然不确定该代码做什么。我使用过数组,但对这段代码不熟悉。看起来此代码通过使用两个索引进行了重复数据删除。那是对的吗?因此,如果同时使用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;

1 个答案:

答案 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个时,就会发生这种情况。

在没有看到数据模型和组合原因(可能是某种笛卡尔联接)的情况下,很难对所选择的内容做出比较模糊的陈述。