【问题标题】:Remove rows from SAS dataset with specific date range从具有特定日期范围的 SAS 数据集中删除行
【发布时间】: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。

【问题讨论】:

  • 请以文本形式发布数据并展示您的尝试。

标签: sql sas sas-macro proc-sql


【解决方案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;

【讨论】:

  • 非常感谢。这个解决方案实际上对我有用。
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2018-11-15
  • 2019-12-12
  • 1970-01-01
  • 2014-06-15
相关资源
最近更新 更多