options validvarname=any;
%macro x2(start,end,pay,money); /*账单日,消费日,消费金额,还款金额*/
data _null_;
hkdate=mdy(month(&start),23,year(&start)); /*到期还款日*/
minhk=%sysevalf(&pay*0.1);
mnd=intnx('month',&start,1,'sameday');
chaz1=datdif(&end,hkdate,'act/act');
chaz2=datdif(hkdate,mnd,'act/act');
pd1=%sysevalf(&end>='01jul2011'd and &end<='31dec2015'd);
pd3=%sysevalf(&pay>10000);
pd5=%sysevalf(&money>=minhk);
pd6=%sysevalf(&money<&pay);
call symput('hkdate',hkdate);
call symput('minhk',minhk);
call symput('mnd',mnd);
call symput('chaz1',chaz1);
call symput('chaz2',chaz2);
call symput('pd1',pd1);
call symput('pd3',pd3);
call symput('pd5',pd5);
call symput('pd6',pd6);
/*信用额度是10000*/
run;
%macro create;
data solu;
本期账单日=&start;
消费日=&end;
本期还款日=&hkdate;
消费金额=&pay;
本期最低还款额=&minhk;
还款金额=&money;
滞纳金=&znm;
循环利息=&xhlx;
下次欠款=&ntqk;
下期最低还款额=&nminhk;
超限费=&cxf;
run;
proc print data=solu;
run;
%mend create;
%if (&pd1=1 and (&pd5=1 and &pd6=1)) or (&pd1=0 and (&pd5=1 and &pd6=1) and &pd3=0) %then
%do;
%let znm=0;
%let xhlx1=%sysevalf(&pay*0.0005*&chaz1);
%let xhlx2=%sysevalf(%sysevalf(&pay-&money)*0.0005);
%let xhlx=%sysevalf(&xhlx1+%sysevalf(&xhlx2*&chaz2));
%let ntqk=%sysevalf(&pay-&money+&xhlx);
%let nminhk=%sysevalf(&minhk+&xhlx);
%let cxf=0;
%create;
%end;
%if &pd1=0 and (&pd5=1 and &pd6=1) and &pd3=1 %then
%do;
%let znm=0;
%let xhlx1=%sysevalf(&pay*0.0005*&chaz1);
%let xhlx2=%sysevalf(%sysevalf(&pay-&money)*0.0005);
%let xhlx=%sysevalf(&xhlx1+%sysevalf(&xhlx2*&chaz2));
%let ntqk=%sysevalf(&pay-&money+&xhlx);
%let nminhk=%sysevalf(&minhk+&xhlx);
%let cxf=%sysevalf(%sysevalf(&pay-10000)*0.05);
%create;
%end;
%mend x2;
run;
%x2('05oct2008'd,'30sep2008'd,1000,100);
run;