用SAS计算财务账龄分析源码.docx
- 文档编号:8722321
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:12
- 大小:55.38KB
用SAS计算财务账龄分析源码.docx
《用SAS计算财务账龄分析源码.docx》由会员分享,可在线阅读,更多相关《用SAS计算财务账龄分析源码.docx(12页珍藏版)》请在冰豆网上搜索。
用SAS计算财务账龄分析源码
用SAS计算财务账龄分析
第一,应收账款表ysk,。
如下
第二步:
已收款表sk,表结构和已收款一致
第三步:
运行程序,算出1-5年的账龄
下面是源代码:
procsql;
createtableysbbiaoas/*欠款大于0的项目先处理*/
select*fromjiesuan.ysbbiaowhereyhthin(selectyhthfrom(selectdistinctyhth,sum(yszj+ysyf+ysother-yj-sk)asqkfromjiesuan.ysbbiaogroupbyyhthhavingqk>0.1));
quit;
dataysk(keep=yhthyskrq2rename=(rq2=yskrq));
setjiesuan.ysbbiao;
rq2=input(rq,yymmdd10.);
formatrq2date9.;
ysk=yszj+ysyf+ysother;
if(abs(ysk)>0.001);
byyhth;
run;
datask(keep=yhthskrq2rename=(rq2=skrq));
setjiesuan.ysbbiao;
rq2=input(rq,yymmdd10.);
formatrq2date9.;
sk=yj+sk;
if(abs(sk)>0.001);
byyhth;
run;
procsql;
createtableresult(yhthchar(10),
yskxnuminformat=12.3format=12.3,
yskrqxnuminformat=YYMMDD10.format=YYMMDD10.,
skxnuminformat=12.3format=12.3,
skrqxnuminformat=YYMMDD10.format=YYMMDD10.);
quit;
procsql;
createtableyhthas
selectdistinctyhthfrom(selectdistinctyhthfromyskunionselectdistinctyhthfromsk)orderbyyhth;
quit;
%macroget(yhth);
datahtsk;
setsk(where=(yhth="&yhth"));
procsort;
byskrq;
run;
datahtysk;
setysk(where=(yhth="&yhth"));
procsort;
byyskrq;
run;
%mendget;
%macroinsert(yhth,ysk,yskrq,sk,skrq);
/*%putinsertintoresultvalues(&yhth,&ysk,&yskrq,&sk,&skrq);*/
procsql;
insertintoresultvalues(&yhth,&ysk,"&yskrq"d,&sk,"&skrq"d);
quit;
%mendinsert;
%macroreadsk(j);
data_null_;
sethtsk(firstobs=&jobs=&j);;
callsymputx('sktemp',sk);
callsymputx('skrqtemp',skrq);
callsymput('yhth',yhth);
run;
%mendreadsk;
%macroreadysk(i);
data_null_;
sethtysk(firstobs=&iobs=&i);;
callsymputx('ysktemp',ysk);
callsymputx('yskrqtemp',yskrq);
callsymput('yhth',yhth);
run;
%mendreadysk;
%macroreadysk2(i);
procsqlnoprint;
selectstrip(yhth),ysk,yskrqinto:
yhth,:
ysktemp,:
yskrqtempfromhtysk(firstobs=&iobs=&i);
quit;
%mendreadysk2;
%macroreadsk2(j);
procsqlnoprint;
selectstrip(yhth),sk,skrqinto:
yhth,:
sktemp,:
skrqtempfromhtsk(firstobs=&jobs=&j);
quit;
%mendreadsk2;
%macrocalcu(yhth,temp,rq,i,j,ysknum,sknum);/*temp=ysk-ski对应yskj对应sk;*/
%if%sysevalf(&temp>=0)%then%do;
%letj=%eval(&j+1);
%if&j<=&sknum%then%do;/*%readsk2(&j);callexecute('%readsk('||strip(&j)||')');*/
procsqlnoprint;
selectstrip(yhth),sk,skrqinto:
yhth,:
sktemp,:
skrqtempfromhtsk(firstobs=&jobs=&j);
quit;
%letflag=%sysevalf(&temp-&sktemp);
%if%sysevalf(&flag>=0)%then%do;/*yskx=&sktemp;*yskrqx=&rq;*skx=yskx;*skrqx=&skrqtemp;*yhth=&yhth;*/
%insert("&yhth",&sktemp,&rq,&sktemp,&skrqtemp);
%end;
%else%do;
/*%letyskx=%sysevalf(&sktemp+&temp);yskrqx=&rq;*skx=yskx;*skrqx=&skrqtemp;*yhth=&yhth;*/
%insert("&yhth",&temp,&rq,&temp,&skrqtemp);
%letrq=&skrqtemp;
%end;
%calcu(&yhth,&flag,&rq,&i,&j,&ysknum,&sknum);
%end;
%else%do;
%insert("&yhth",&temp,&rq,0,&SYSDATE9);/*%lettemp=%sysevalf(&ysktemp+0);%globalrq=&yskrqtemp;*/
%leti=%eval(&i+1);
%if&i<=&ysknum%then%do;/*%readysk2(&i);*callexecute('%readysk('||strip(&i)||')');*%readysk(&i);/*yskx=&temp;yskrqx=&rq;skx=0;skrqx=&rq;yhth=&yhth;*/
procsqlnoprint;
selectstrip(yhth),ysk,yskrqinto:
yhth,:
ysktemp,:
yskrqtempfromhtysk(firstobs=&iobs=&i);
quit;
%calcu(&yhth,&ysktemp,&yskrqtemp,&i,&j,&ysknum,&sknum);
%end;
%end;
%end;
%else%do;*temp<=0;
%leti=%eval(&i+1);
%if&i<=&ysknum%then%do;/*%readysk2(&i);callexecute('%readysk('||strip(&i)||')');*/
procsqlnoprint;
selectstrip(yhth),ysk,yskrqinto:
yhth,:
ysktemp,:
yskrqtempfromhtysk(firstobs=&iobs=&i);
quit;
%letflag=%sysevalf(&temp+&ysktemp);
/*%putflagflagflagflagflagflagflagflag2=&flagflag=&flag;*/
%if%sysevalf(&flag<=0)%then%do;/*yskx=&ysktemp;yskrqx=&yskrqtemp;skx=yskx;skrqx=&rq;yhth=&yhth;*/
%insert("&yhth",&ysktemp,&yskrqtemp,&ysktemp,&rq);
%end;
%else%do;/*%letyskx=%sysevalf(&ysktemp-&temp);yskrqx=&yskrqtemp;skx=yskx;skrqx=&rq;yhth=&yhth;*/
%insert("&yhth",%sysevalf(0-&temp),&yskrqtemp,%sysevalf(0-&temp),&rq);
%letrq=&yskrqtemp;
%end;
%calcu(&yhth,&flag,&rq,&i,&j,&ysknum,&sknum);
%end;
%else%do;
%insert("&yhth",0,&SYSDATE9,%sysevalf(0-&temp),&rq);/*%globaltemp=%sysevalf(&sktemp+0);%globalrq=&skrqtemp;*/
%letj=%eval(&j+1);
%if&j<=&sknum%then%do;/*%reallexecute('%readsk('||strip(&j)||')');*%readsk(&j);/*%letskx=%sysevalf(0-&temp);skrqx=&rq;yskx=0;yskrqx=&rq;yhth=&yhth;*/
procsqlnoprint;
selectstrip(yhth),sk,skrqinto:
yhth,:
sktemp,:
skrqtempfromhtsk(firstobs=&jobs=&j);
quit;
%calcu(&yhth,%sysevalf(0-&sktemp),&skrqtemp,&i,&j,&ysknum,&sknum);
%end;
%end;
%end;
%mendcalcu;
%macrodescrible;
%if%sysevalf(&ysktemp=.)%then%do;
%letysktemp=0;
%end;
%if%sysevalf(&yskrqtemp=.)%then%do;
%letyskrqtemp=&SYSDATE9;
%end;
%menddescrible;
%macroexact;
%letdsid=%sysfunc(open(yhth));
%letnum=%sysfunc(attrn(&dsid,nobs));
%doi=1%to#
%letrc=%sysfunc(fetchobs(&dsid,&i));
%letyhth=%sysfunc(getvarc(&dsid,1));
%sysfunc(close(yhth);
%get(&yhth);
procsqlnoprint;
selectysk,yskrq,count(*)into:
ysktemp,:
yskrqtemp,:
ysknumfromhtysk;
selectcount(*)into:
sknumfromhtsk;
quit;
%describle;
%calcu(&yhth,&ysktemp,&yskrqtemp,1,0,&ysknum,&sknum);
%end;
%mendexact;
%exact;
procsql;
createtableyhthskas
selectdistinctyhth,sum(yskx)asysk,sum(skx)asskfromresultgroupbyyhth;
quit;
procsql;
createtableqkas
selectyhth,yskx-skxasqk,min(yskrqx,skrqx)asrqformat=yymmdd10.,intck('month',min(yskrqx,skrqx),date())asmonths,ceil((intck('month',min(yskrqx,skrqx),date()))/12)asyuefromresult
whereyhthin(selectyhthfromyhthskwhereysk>sk)andyskx^=skxorderrq;
quit;
procsql;
createtableqk2as/*欠款小于0*/
selectyhth,yskx-skxasqk,min(yskrqx,skrqx)asrqformat=yymmdd10.,intck('month',min(yskrqx,skrqx),date())asmonths,ceil(intck('month',min(yskrqx,skrqx),date())/12)asyuefromresult
whereyhthnotin(selectyhthfromyhthskwhereysk>sk)andyskx^=skx;
quit;
procsql;
createtablezhangas
selectyhth,sum(casewhenyue=1thenqkelse0end)asone,sum(casewhenyue=2thenqkelse0end)astwo,
sum(casewhenyue=3thenqkelse0end)asthree,sum(casewhenyue=4thenqkelse0end)asfourfromqkgroupbyyhth;
quit;
procsql;
createtablehbyhthas
selectdistinctdwmc,yhth,ywy,diqu,yhth1from
(selectdwmc,yhth,ywy,diqu,yhth1fromjiesuan.hbyhthwhereyhth1isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth2fromjiesuan.hbyhthwhereyhth2isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth3fromjiesuan.hbyhthwhereyhth3isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth4fromjiesuan.hbyhthwhereyhth4isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth5fromjiesuan.hbyhthwhereyhth5isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth6fromjiesuan.hbyhthwhereyhth6isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth7fromjiesuan.hbyhthwhereyhth7isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth8fromjiesuan.hbyhthwhereyhth8isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth9fromjiesuan.hbyhthwhereyhth9isnotnull
unionall
selectdwmc,yhth,ywy,diqu,yhth10fromjiesuan.hbyhthwhereyhth10isnotnull)
orderbyyhth1;
quit;
procsql;
createtablezhanglmxas
selectzhang.*,hbyhth.yhthasht,hbyhth.dwmc,hbyhth.ywy,hbyhth.diqufromzhangleftjoinhbyhthonhbyhth.yhth1=zhang.yhth;
quit;
procsql;
createtablezhanglhzas
selectdistinctht,dwmc,ywy,diqu,sum(one)asone,sum(two)astwo,sum(three)asthree,sum(four)asfourfromzhanglmxgroupbyht,dwmc,ywy,diqu;
quit;
datazhangljieguo;
setzhanglhz;
ifone<0thendo;
two=two+one;
one=0;
end;
iftwo<0thendo;
three=two+three;
two=0;
end;
ifthree<0thendo;
four=three+four;
three=0;
end;
iffour<0thendo;
three=three+four;
four=0;
end;
ifthree<0thendo;
two=two+three;
three=0;
end;
iftwo<0thendo;
one=one+two;
two=0;
end;
yshz=one+two+three+four;
if(yshz>100);
procsort;
bydescendingyshz;
run;
dataa_dwzl;
setzhangljieguo;
dropdiqu;
run;
procsql;
createtablea_ywyzlas
selectdistinctywy,sum(one)asone,sum(two)astwo,sum(three)asthree,sum(four)asfour,sum(yshz)asyshzfromzhangljieguogroupbyywyorderbyyshzdesc;
quit;
procsql;
createtablea_diquzlas
selectdistinctdiqu,sum(one)asone,sum(two)astwo,sum(three)asthree,sum(four)asfour,sum(yshz)asyshzfromzhangljieguogroupbydiquorderbyyshzdesc;
quit;
/*
odshtml;
dataa;
setfinal;
byyhth;
flag=0;
iffirst.yhth=1thenflag=0;
lagflag=lag(flag);
if(lag(skx)=0orlag(flag)=1oryskx=0)andfirst.yhth=0thenflag=1;
z=flag;
run;
datab;
seta;
byyhth;
if(first.yhth=0andlag(z)=1)thenz=1;
run;
procsql;
createtableyas
selectdistinctyhth,sum(skx)asskfrombgroupbyyhth;
quit;*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS 计算 财务 分析 源码