从具有特定日期范围的 SAS 数据集中删除行

Posted

技术标签:

【中文标题】从具有特定日期范围的 SAS 数据集中删除行【英文标题】:Remove rows from SAS dataset with specific date range 【发布时间】:2022-01-15 09:48:54 【问题描述】:

有 2 个数据集。我想要一个包含仅在 Dataset_A 中而不在 Dataset_B 中的所有行的 Final_Output 数据集。 此外,在 Dataset_B 中的日期可以在 Dataset_A 中的日期的 +8 或 -8 范围内。

在这里,日期为 21-Jan-21 且金额为 $10 的 Account_no 324 与 Dataset_B 中的匹配项(Dataset_A.Date 比 Dataset_B.Date 中的日期大 +8 或小 -8)。

就像图片一样。突出显示的颜色被移除,剩下的是 Final_Output。

【问题讨论】:

请以文本形式发布数据并展示您的尝试。 【参考方案1】:

试试这个,如果这就是你要找的,请告诉我。我分两步来帮助你理解逻辑,你也可以浓缩成一步。

第一步会将 B 中符合您的条件的所有数据与 A 连接起来。 第二步将删除匹配的,并保留其余的。

proc sql;
create table Temp as
    select a.*, b.account_no as B_Account_No
from Dataset_A A left join Dataset_B B 
    on a.Account_no = b.Account_no 
        and intnx('day', a.Date, -8) < b.Date < intnx('day', a.Date, +8)
;quit;

data Final;
set Temp;
    where B_Account_no = .;
drop B_Account_no ;
run;

【讨论】:

非常感谢。这个解决方案实际上对我有用。

以上是关于从具有特定日期范围的 SAS 数据集中删除行的主要内容,如果未能解决你的问题,请参考以下文章

怎样在sas数据集中选取某些数据行形成新的数据集

SAS:如何创建(日期变量)数据集

VBA - 删除不在给定日期范围内的数据

SAS - 如何从数据集中获取最后的“n”个观察结果?

在特定 ID 列上合并两个 DataFrame(数据集)但具有日期条件

从 Netezza 数据库创建 SAS 数据集时,SAS“CLI 游标扩展提取错误:数值超出范围”