arrays - 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;
解决方案
排序是
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_IDX
s 中出现的 s 时会发生这种情况。
在没有看到数据模型和组合原因(可能是某种笛卡尔连接)的情况下,很难对所选择的内容做出不那么模糊的陈述。
推荐阅读
- r - 错误:`summarise()` 输入 `wt` 的问题:geom_net 函数与新的 dplyr 版本不兼容
- security - 如何使 ImageMagick 在 Heroku-18 堆栈上保持最新?
- java - 如何使用 ArrayAdapter 从 Firebase 数据库中读取数据并在 ListView 中显示多个字段
- angular - 渲染中的角度错误 - 未找到组件
- c - 在 C 中的 Unicorn 模拟器中设置堆栈和堆
- c# - c# ref struct 参数内联
- javascript - 尝试对语义-ui Dimmer 使用 State() 时出现“错误:重新渲染过多”
- spring - Spring Security 不限制访问
- java - HtmlUnit 缺少形式参数
- symfony - 如何在 EasyAdmin Symfony 中创建可重用的块