【问题标题】: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;