首页 > 解决方案 > SAS,数组代码,两个索引,删除记录

问题描述

我正在查看一些代码并想知道这是做什么的。下面是代码注释。即使有代码注释,我仍然不确定这段代码的作用。我用过数组,但不熟悉这段代码。看起来此代码通过使用两个索引进行了重复数据删除。那是对的吗?那么如果有 CCS_DR_IDX 和 TXN_IDX 的组合,它会删除那些记录吗?

现在处理美元匹配的情况。如果 ccs_dr_idx 已被使用,则删除该记录。此处丢弃的 txns 将与称为丢失的声明数据一起重新添加。

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;

标签: arrayssas

解决方案


排序是

BY CCS_DR_IDX DATEDIF;

当控制到达数据步骤的底部并隐含s时,会发生过滤选择。OUTPUT仅当CCS_DR_IDX 并且 TXN_IDX是以前都没有出现过的组合时才会发生这种情况。

由于您已经排序,CCS_DR_IDX因此您可以知道存在隐式分组,并且每个CCS_DR_IDX输出最多有一条记录,并且对于第一组,它必须是该组中的第一条记录。组中的每个连续行,即CCS_DR_IDX输出后,将匹配 in 中的一个条目id_one并被DELETE.

当您开始处理下一个CCS_DR_IDX组时,将处理这些行,直到您到达TXN_ID与 中跟踪的那些不同的下一个id_two。因为排序有第二个键DATDIF,所以您可以说输出是“选择第一次出现的唯一配对项组合CCS_DR_IDX TXN_ID(有点类似于不重复的配对采样。)

可能会出现 someCCS_DR_IDX不在输出中的情况——当组仅包含TX_ID在先前CCS_DR_IDXs 中出现的 s 时会发生这种情况。

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


推荐阅读