sas的data步
问题:各月份的放款数据,通过年份进行分组求各账龄下的逾期表现,要求该账龄下的逾期若未完全表现则该账龄下的数据不计算。
解决方法:data步 array账龄数据,by年份可以实现。
疑惑点:想要知道这个array下的原理是什么,为什么可以满足(该账龄下的逾期若未完全表现则该账龄下的数据不计算)的需求
代码:
%macro pinbiao(start_date=20191231,end_date=20230630,n_k=42);
data temp1;
SET temp;
by 年份 ;
array m_p_o m_p_o_:;
array m_o_i m_o_i_:;
array sum_m_p_o sum_m_p_o_0-sum_m_p_o_%sysfunc(compress(&n_k.));
array sum_m_p_o_r sum_m_p_o_r_0-sum_m_p_o_r_%sysfunc(compress(&n_k.));
damn_k=INTCK('month',合同开始时间,input("&end_date.",yymmdd10.))+1;
if first.年份 then do;
sum_m_fk=0;
do i =1 to damn_k;
sum_m_p_o(i)=0;
sum_m_p_o_r(i)=0;
end;
end;
sum_m_fk+m_fk;
do i = 1 to damn_k;
if m_o_i(i)>1 then do;
sum_m_p_o(i)+m_p_o(i);
end;
sum_m_p_o_r(i)=sum_m_p_o(i)/sum_m_fk;
if i=damn_k then do;yq_dkye=sum_m_p_o(i);end;
end;
if last.年份 then output;
keep 年份 sum_m_p_o_r_:;
run;
%mend;
%pinbiao(start_date=20191231,end_date=20230630,n_k=42);
结果: