%macro aa;/*导入现金流量表*/
%do i=1 %to 2;
proc import out=fs_comscfd&i.
datafile="E:\da_calcu\FS_Comscfd&i..txt"
dbms=tab replace;getnames=yes; datarow=4;run;
%end;%mend;%aa
data fs_comscfd;set fs_comscfd1-fs_comscfd2;run;
%macro bb;/*导入利润表*/
%do i=1 %to 2;
proc import out=fs_comins&i.
datafile="E:\da_calcu\fs_comins&i..txt"
dbms=tab replace;
getnames=yes; datarow=4;run;
%end;%mend;%bb
data fs_comins;set fs_comins1-fs_comins2;run;
%macro cc;%do i=1 %to 2;/*导入资产负债表*/
proc import out=fs_combas&i.
datafile="E:\da_calcu\fs_combas&i..txt"
dbms=tab replace;
getnames=yes; datarow=4;run;
%end;%mend;%cc
data fs_combas;set fs_combas1-fs_combas2;run;
/*选出当前年份的归属行业*/
proc import out=indcd_year
datafile='e:\da_calcu\indcd_year.xls' dbms=excel replace;
getnames=yes; SCANTEXT=Yes;run;
data indcd_year;set indcd_year;length stkcd 8;run;
proc sort data=fs_combas;by stkcd accper;run;
proc sort data=fs_comins;by stkcd accper;run;
proc sort data=fs_comscfd;by stkcd accper;run;
proc sql;
create table fin as select
a.stkcd, d.ind,
year(a.accper) as year,
b.b001100000 as rev,
c.c001000000 as cfo,
b.b002000101-c.c001000000 as tacc,
a.a001000000 as ta,
a.a001111000+ a.a001110000 as rec,
a.a001212000 as ppe
from fs_combas a, fs_comins b, fs_comscfd c, indcd d
where a.stkcd=b.stkcd and a.stkcd=c.stkcd and a.stkcd=d.stkcd
and month(a.accper)=12 and month(b.accper)=12 and month(c.accper)=12
and year(a.accper)=year(b.accper) and year(a.accper)=year(c.accper) and year(a.accper)=d.year/**/
order by stkcd,year;
drop table fs_combas1,fs_combas2,fs_comins1,fs_comins2,fs_comscfd1,fs_comscfd2;
quit;
/*将各指标除以期初总资产*/
proc sql;
create table idx as
select distinct a.stkcd,a.year,a.ind,
a.tacc/b.ta as tacc format=11.8,
1/b.ta as a0 format=20.18,
(a.rev-b.rev)/b.ta as rev format=10.8,
(a.rev-b.rec)/b.ta as rec,
a.ppe/b.ta as ppe format=10.8
from fin a, fin b
where a.stkcd=b.stkcd and a.year=b.year+1 and b.ta>0
order by stkcd,year;
/*计算各行业的观测值数目*/
create table regtj as select distinct ind,year,n(stkcd) as nn from idx group by ind,year;
/*要求各行业每年至少有15个观测值*/
create table idx1 as
select distinct a.*,b.nn from idx a,regtj b
where a.ind=b.ind and a.year=b.year and b.nn>=15 and a.tacc ne .
order by ind,year,stkcd;
quit;
/*分行业、年度估计三个回归参数*/
proc reg data=idx1 outest=ot;
model tacc=a0 rev ppe/noint adjrsq;
by ind year;
run;
/*计算操纵性应计项目*/
proc sql;
create table da1 as
select distinct a.stkcd,a.year,a.ind,
b.a0*a.a0+b.rev*(a.rev-a.rec)+b.ppe*a.ppe as nda format=10.6,
a.tacc-(calculated nda) as da1 format=10.6
from idx1 a,ot b
where a.ind=b.ind and a.year=b.year and _adjrsq_>=0.01
order by stkcd,year;
quit;/*计算出的DA放在数据集da1中*/
/*描述:结果很奇怪*/
proc sort data=da1;by da1;run;
proc means data=da1;var da1;run;