【发布时间】:2020-12-25 18:27:35
【问题描述】:
我的代码如下:
%macro xx(date);
proc sql;
create table test_&date as
select a.*
from population_&date as a
left join new_acct_no as b on a.names = b.names and put(intnx('month',input(put(&date,8. -l),yymmn6.),0,'e'),yymmdd10.) between b.birthdate and b.marriage_dt
left join old_acct_no as c on a.names = c.names and put(intnx('month',input(put(&date,8. -l),yymmn6.),0,'e'),yymmdd10.) between c.birthdate and c.marriage_dt
;
quit;
%mend;
%date(201812);
我想通过替换“put(intnx('month',input(put(&date,8. -l),yymmn6.),0,'e'),yymmdd10.)”使我的代码更简洁。
任何想法如何做到这一点?
【问题讨论】:
-
BIRTHDATE 和 MARRIAGE_DT 是什么类型的变量?您的代码正在处理它们具有字符串。
-
你确定逻辑是对的吗?如果 MARRIAGE_DT 是 15DEC2018 怎么办?那是在 2018 年 12 月,但不会受到打击,因为它是在月底之前
-
@tom 是的,我将日期视为字符。 2018-12-31 在生日和结婚日期之间。
标签: loops sas conditional-statements case sas-macro