《sas在财务、会计研究中的运用.ppt》由会员分享,可在线阅读,更多相关《sas在财务、会计研究中的运用.ppt(92页珍藏版)》请在三一办公上搜索。
1、会计与财务研究中常见问题的SAS实现,会计与财务研究中的常用软件,SAS-面向多数据处理,功能强大,但上手难度较大;-识别汉字;-特别适合于数据的初步整理阶段(程序可保存,容易再现历史);STATA-软件小巧,便于安装,且上手较容易;-回归和检验功能非常强大;-升级快,命令包可以随时在网上下载,支持自我学习;研究实践:SAS(数据整理)+STATA(回归检验),会计与财务研究中的常用软件,会计研究中的STATA运用-Clive Lennox的个人网站http:/ihome.ust.hk/accl/Phd_teaching.htm-为中山大学会计系所授课程 课件和演示用数据,课程主要内容,SAS
2、的一些基本操作;分组回归程序:计算DA;CAR程序:不使用宏和使用宏;计算股票年度业绩RET的程序;Proc SQL:多表合并程序-配对程序;,参考书,高惠璇等编译,SAS系统 BASE SAS软件使用手册,中国统计出版社,1997;高惠璇等编译,SAS系统 SAS/STAT软件使用手册,中国统计出版社,1997;这两本书类似于字典,用来查,而不是用来读;学SAS的最佳方法:-对照已有的程序和数据一步一步地跑,碰到不懂的命令(有时可以不求甚解),便去查书;,SAS的基本操作,创建新的数据集并输出-打开SAS,在编辑器中写入程序:data wghtclub;input idno 1-4 name
3、$6-24 team$strtwght endwght;loss=strtwght-endwght;cards;1023 David Shaw red 189 165 1049 Amelia Serrano yellow 145 124 1219 Alan Nance red210 192 1246 Ravi Sinha yellow 194 177 1078 Ashley McKnight red127 118 1221 Jim Brown yellow 220.1095 Susan Stewart blue135 127 1157 Rose Collins green155 141 133
4、1 Jason Schock blue187 172 1067 Kanoko Nagasakagreen135 122 1251 Richard Rose blue181 166;run;proc print data=wghtclub;title Fitness Center Weight Club;run;-结果:在SAS逻辑库的Work中,就会出现wghtclub数据集;,SAS的基本操作,将EXCEL数据导入SAS-比如,要将H盘SAS目录中的profit.xls文件导入SAS,并命名为profit;-打开SAS,在编辑器中写入程序:proc import out=profit dat
5、afile=H:SASprofit.xls dbms=excel2000 replace;run;-结果:在SAS逻辑库的Work中,就会出现profit数据集;,SAS的基本操作,右键点开profit数据集查看数据集情况;将Accper转变成年度;data profit;set profit;year=substr(accper,1,4)+0;run;,Substr:文本截取命令,即对Accper的第1个字符开始,取4个字符;如accper的一个观测值是1991-12-31,则 substr(accper,1,4)就为1991,而Substr(accper,6,2)则为12.将文本变量转化为
6、数值变量,直接让文本变量加0即可;,Data x2;set x1;对x1数据进行加工,然后保存为X2;,SAS的基本操作,数据排序-对profit数据按照stkcd和year进行排序;proc sort data=profit nodupkey;by stkcd year;run;变量改名 data profit1;set profit;rename stkcd=code;run;,SAS的基本操作,数据横向合并-比如,要将Profit和solvency进行merge:先将solvency.xls文件导入SAS proc import out=solvency datafile=“H:SASs
7、olvency.xls dbms=excel2000 replace;run;data solvency;set solvency;year=substr(accper,1,4)+0;run;proc sort;by stkcd year;run;,在对两个或多个数据集进行merge时,需要首先按照关键变量(如公司代码和年度)进行排序;,省略时,默认对最近的数据集进行排序;,SAS的基本操作,数据横向合并 data fin_ratio;merge profit(in=a)solvency;by stkcd year;if a;run;,注意:data x1;merge tmp1(in=a)tm
8、p2;by var1 var2;if a;run-表示已tmp1为基础进行合并,合并后的数据集样本数同tmp1相同;data x1;merge tmp1 tmp2;by var1 var2;run-包括了tmp1和tmp2的所有观测值;data x1;merge tmp1(in=a)tmp2(in=b);by var1 var2;if a=1 and b=1;run-只包括tmp1和tmp2中共有的观测值;,SAS的基本操作,纵向合并(append)data x1;set tmp1 tmp2;Run;-SAS自己会去找对应的变量;,SAS的基本操作,产生新的虚拟变量 比如,要从fin_rati
9、o产生一个2006以后的虚拟变量,即年度在2006年后的,取值为1,否则为0;则:data fin_ratio;set fin_ratio;after2006=0;if year=2006 then after2006=1;run;,SAS的基本操作,剔除变量空缺的观测值;CSMAR数据集中,有些变量空缺,导入SAS为“.”,有些无点,为一个空格,则可以通过如下命令剔除这些数据缺失的观测值:比如,希望剔除fin_ratio数据中,ROS缺失的样本;proc sort data=fin_ratio;by ros;run;data tmp1;set fin_ratio;if ros=.or ros
10、=then delete;run;,SAS的基本操作,假如要把ROS,ROA,ROE的缺失样本同时删除:data tmp2;set fin_ratio;if ros+roa+roe=.then delete;run;SAS的一些基本算符:*/=等于=不等于=SAS的函数分类可以参见高惠璇SAS BASE 1997 pp.70-74,SAS的基本操作,SAS日期函数在CSMAR的数据库中,导出的日期文件一般为yyyy-mm-dd,如1999-12-31日,这是一个文本格式,那么,如何将其转化为标准的日期格式呢?比如,我们经常要计算公司上市年龄,上市公司年龄等于各个财政年度末减去IPO日期所间隔的
11、天数,然后除于365得到上市年龄,比如,一个公司1995-05-23日IPO,则2007年12月31日时,他的上市年龄多少?,SAS的基本操作,SAS日期函数-SAS日期值函数:Mdy(month,day,year);如mdy(12,31,1991)=11687,11687代表1991-12-31日同1960-1-1所间隔的天数;-还原出sas日期值的函数:假定date是一个SAS日期值,则year(date)得到年,month(date)得到月,day(date)得到日;-现在,我们要计算Fin_ratio数据集中,各公司财政年末同1990-05-07(假定所有公司IPO日期都是这天)的时间
12、距离;,SAS的基本操作,SAS日期函数data tmp1;set fin_ratio(keep=stkcd accper ros);ipodate=mdy(5,7,1990);run;data tmp2;set tmp1;fiscal_year=substr(accper,1,4)+0;fiscal_month=substr(accper,6,2)+0;fiscal_day=substr(accper,9,2)+0;fiscaldate=mdy(fiscal_month,fiscal_day,fiscal_year);age=(fiscaldate-ipodate)/365;run;,对数据
13、进行winsorize处理,任务:对fin_ratio中的ROS,ROE,ROA,Current和Acid按上下1%进行winsorize处理;data tmp1;set fin_ratio;d=1;run;proc means noprint;var roa roe ros current acid;by d;output out=tmp2(drop=_freq_ _type_)p1=x1-x5 p99=y1-y5;,Proc means:对数据进行描述性统计;noprint:统计结果不在SAS中显示;Var:指定需要分析的变量;by:按什么条件进行分析(e.g.,by year,分年度进行
14、分析);Output out=tmp2:将分析结果保存于tmp2中;p1:变量1分位数的值 p1=x1-x5:5个变量1分位数的值(-不是减号);p99:变量99分位数的值;,对数据进行winsorize处理,data tmp3;merge tmp1 tmp2;by d;array z1:5 roa roe ros current acid;array x1:5 x1-x5;array y1:5 y1-y5;do i=1 to 5;if ziyi then zi=yi;end;drop i d x1-x5 y1-y5;run;,Winsorize的原理:如果一个样本某变量的值大于该变量的99分
15、位数,则该样本的值被强制指定为99分位数的值;类似的,如果一个样本某变量的值小于该变量的1分位数,则该样本该变量的值被强制指定为1分位数的值;Array:指定一组变量(向量);如这里:z1便为roa,x1为x1,即roa的1分位数;y1为y1,即roa99分位数;由于需要winsorize五个变量,因此需要循环5次;,对样本进行描述性统计,希望对一组样本进行描述性统计,包括均值、中位数、标准差等,可以采用proc means 和proc univariate模块;比如,希望对fin_ratio进行描述性统计:proc means data=fin_ratio;var roa roe ros c
16、urrent acid after2006;run;,对样本进行描述性统计,如果希望按年度或按行业分组进行描述性统计:proc sort data=fin_ratio;by year indcd;run;proc means data=fin_ratio;var roa roe ros current acid after2006;by year indcd;run;,对样本进行描述性统计,如果希望保存每组样本的某个统计量(如均值,中位数或者标准差),则可以使用如下程序:比如,希望计算1990-2006年按年和行业均值(中位数)调整后的ROA和ROS,则程序如下:*由于indcd行业分类太细,
17、我们只想使用22个行业,即C类分到二级代码,其余都使用一级代码 data tmp1;set fin_ratio(keep=stkcd year indcd roa ros);if substr(indcd,1,1)=C then ind=substr(indcd,1,2);if substr(indcd,1,1)=C then ind=substr(indcd,1,1);drop indcd;run;,对样本进行描述性统计,*产生各年、各行业ROA和ROS的均值和中位数;proc sort data=tmp1;by year ind;run;proc means noprint;var roa
18、 ros;by year ind;output out=tmp2 mean=mean_roa mean_ros median=median_roa median_ros;run;,对样本进行描述性统计,*合并tm1和tmp2,以计算均值中位数调整后的roa和ros;data tmp3;merge tmp1 tmp2;by year ind;run;data tmp4;set tmp3;roa_mean_adj=roa-mean_roa;roa_median_adj=roa-median_roa;ros_mean_adj=ros-mean_ros;ros_median_adj=ros-media
19、n_ros;run;,对样本进行描述性统计,如果只想看看样本更全面的统计变量,可以使用proc univariate命令,这个命令还可以顺带检验样本的均值(中位数)是否异于0;proc univariate data=fin_ratio;var ros roa;run;,计算Discretion accruals,修正的Jones模型(see.Bartov et al.,2001,JAE)-首先计算总应计利润(ACCA):ACCA=(t年营业利润t年经营现金流量)/At-1,然后分年度、分行业对如下模型进行回归:,计算Discretion accruals,业绩调整的DA模型,计算DA的SAS
20、程序,假定我们已经有了1998-2008年所有A股上市公司的以下数据:总资产TA,营业收入REV,固定资产PPE,应收账款REC,营业利润Earnings和经营现金流量OCF,以及公司代码、年度和行业,这些数据已经做成名为raw_em的SAS数据集。计算DA的程序:step1:调入raw_em数据集 libname dd“H:SAS;data tmp1;set dd.raw_em;run;Step2:计算相关变量:-先产生TA,REV 和REC的滞后(上年度)变量(滞后变量的结果将导致样本量减少1年);-然后合并,计算相关变量;,计算DA的SAS程序,data tmp2;set tmp1(ke
21、ep=stkcd year ta rev rec);year=year+1;rename ta=pre_ta rev=pre_rev rec=pre_rec;run;data tmp3;merge tmp1(in=a)tmp2;by stkcd year;if a;run;data tmp3;set tmp3;acca=(earnings-ocf)/pre_ta;a1=1/pre_ta;delt_rev=(rev-pre_rev)/pre_ta;ppe_ta=ppe/pre_ta;delt_rec=(rec-pre_rec)/pre_ta;run;,产生滞后变量,合并,计算相关变量,计算DA的
22、SAS程序,Step 3:对计算好的变量进行winsorize处理(上下1%):data tmp4;set tmp3(keep=stkcd year indcode acca a1 delt_rev ppe_ta delt_rec roa);d=1;where year1998;run;proc means noprint;var acca a1 delt_rev ppe_ta delt_rec roa;by d;output out=tmp5(drop=_freq_ _type_)p1=x1-x6 p99=y1-y6;data tmp6;merge tmp4 tmp5;by d;array
23、z1:6 acca a1 delt_rev ppe_ta delt_rec roa;array x1:6 x1-x6;array y1:6 y1-y6;do i=1 to 6;if ziyi then zi=yi;end;drop i d x1-x6 y1-y6;run;,计算DA的SAS程序,Step 4:计算估计的Jones模型的系数proc sort;by year indcode;run;proc reg data=tmp6 outest=tmp7;model acca=a1 delt_rev ppe_ta/noint adjrsq;by year indcode;run;,outes
24、t:把回归模型的估计结果(参数)保存在tmp7文件之中;noint:不带截距项回归;by year indcode:按年-行业分组进行回归;,计算DA的SAS程序,data tmp8;set tmp7;ea1=a1;ea2=delt_rev;ea3=ppe_ta;n=_p_+_edf_;keep year indcode ea1 ea2 ea3 n _adjrsq_;run;data tmp8;set tmp8;where n=5;run;proc sort;by year indcode;run;proc sort data=tmp6;by year indcode;run;data tmp
25、9;merge tmp6(in=a)tmp8;by year indcode;if a;run;,Tmp7中,已经包括了各组各变量的回归系数,现在把这些估计的回归系数找出来,并存为tmp8.,计算每组回归的样本数,因为样本数太少的回归是无效的回归。,把回归系数同各个公司各年的变量(tmp4)进行合并,通过相乘得到正常的应计利润;,计算DA的SAS程序,Step5:根据估计得到的系数计算修正的Jones的DA;data tmp10;set tmp9;nda=ea1*a1+ea2*(delt_rev-delt_rec)+ea3*ppe_ta;da_jones=acca-nda;run;data d
26、a_jones;set tmp10;abs_da_jones=abs(da_jones);keep stkcd year indcode da_jones abs_da_jones;run;proc sort;by stkcd year;run;,计算DA的SAS程序,Step6:计算业绩调整的DAproc reg data=tmp6;model acca=a1 delt_rev ppe_ta roa/adjrsq;by year indcode;output out=tmp11 r=da_perf;run;,output out:把回归结果保存于tmp11中,r是回归残差的意思,r=da_p
27、erf,即把回归残差命名为da_perf;,计算DA的SAS程序,data tmp11;set tmp11;keep stkcd year indcode da_perf;run;proc means noprint;var da_perf;by year indcode;output out=tmp12(drop=_freq_ _type_ where=(nx=5)n=nx;run;data tmp13;merge tmp12(in=a)tmp11;by year indcode;if a;run;proc sort;by stkcd year;run;,要求各年各行业的样本数至少不小于5n
28、是一个统计量,统计各组的观测值个数;,计算DA的SAS程序,Step 7 合并和保存两种DA:data da;merge da_jones tmp13(drop=nx);by stkcd year;run;Data dd.da;set da;run;,CAR程序,在事件研究(event study)中,计算累计非正常报酬(CAR)是个常见问题;两种计算CAR的方法:-市场均值调整 事件日的个股回报减去当天的市场回报;-市场调整法 首先要估算个股的Beta系数,然后根据CAMP模型计算事件日的CAR;-参考文献:Chen,Su and Zhao,2000,CAR;,CAR程序,CAR程序,假定我
29、们已经有了计算CAR的两个数据集,一个是日个股回报数据(RET),一个是个股年报宣告日数据(Andate):RET数据集包括:stkcd:股票代码 Traddt:股票交易日;Raw_ret:每只股票每个交易日的日个股回报(考虑 现金红利再投资的日个股回报率);Market_ret:每日的市场回报(考虑现金红利再投 资的日市场回报率(流通市值加权平均法))Andate数据集包括:stkcd:股票代码 year:年报年度;annodt:年报宣告日;,CAR程序,任务:计算2000和2001年年报宣告日前后共3天的CAR;-方法一:不使用宏,但需要每年计算一次;-方法二:使用宏,可以一次得到多年宣告
30、日的CAR;,CAR程序:不使用宏,以计算2000年年报宣告日前后3天的CAR为例Step1:导入数据并日期加工 libname cc H:sas;data ret;set cc.ret;tr_date=substr(trddt,1,4)*10000+substr(trddt,6,2)*100+substr(trddt,9,2);drop trddt;run;data ret2000;set ret(where=(20000430tr_date20010530);year=2000;run;,CAR程序:不使用宏,data andate2000;set cc.andate(where=(yea
31、r=2000);an_date=substr(annodt,1,4)*10000+substr(annodt,6,2)*100+substr(annodt,9,2);drop annodt;run;data tmp1;merge andate2000(in=a)ret2000;by stkcd year;if a;run;data tmp2;set tmp1;t=tr_date-an_date;run;,合并交易数据和宣告日数据,CAR程序:不使用宏,step 2:确定个股年报宣告日之前计算beta的窗口;data tmp3;set tmp2;where t0;run;proc rank da
32、ta=tmp3 out=tmp4 descending;var t;ranks t1;by stkcd;run;data tmp5;set tmp4;t1=-t1;run;,确保交易日在宣告日之前,Proc rank:排序命令;Descending:逆排序(从大到小),t1都是正的,取负号,使其为负,以确定(-150,-30)窗口;,CAR程序:不使用宏,step3:使用(-150,-30)窗口计算beta系数data tmp6;set tmp5(where=(-150=t1-30);proc sort;by stkcd;run;proc reg noprint outest=beta2000
33、;model raw_ret=market_ret/adjrsq;by stkcd;run;data beta2000;set beta2000;alpha=intercept;beta=market_ret;n=_p_+_edf_;adjrsq=_adjrsq_;keep stkcd alpha beta n adjrsq;run;,CAR程序:不使用宏,step4:计算(-30,+30)窗口中,每日的非正常报酬*-在tmp5中,已经确定了宣告日之前的窗口,因此-;data pre;set tmp5(where=(-30=0;run;proc rank out=after;var t;ran
34、ks t1;by stkcd;run;data after;set after;t1=t1-1;run;data car;set pre after;proc sort;by stkcd t1;run;,由于t1的最小值也是1,因此,在确定事件窗口时,应该减去1,以确定0,30的窗口;,合并-30,-1和0,+30窗口,CAR程序:不使用宏,step 5:合并CAR和beta2000data car2000;merge car beta2000;by stkcd;run;step 6:计算(-30,30)每天的ARdata car2000;set car2000;ar=raw_ret-(alp
35、ha+beta*market_ret);mr=raw_ret-market_ret;run;,CAR程序:不使用宏,step7:计算-1,+1三天的CARdata tmp10;set car2000(where=(-1=t1=1);keep stkcd year t1 ar mr;run;proc means noprint;var ar mr;by stkcd;output out=car3 sum=car cmr;run;data car3;set car3(keep=stkcd car cmr);year=2000;run;,CAR程序:不使用宏,练习:自行计算2001年的CAR。,CA
36、R:使用宏,建立一个宏%macro abr1;一段程序;%mend;以后调用这个宏时,使用%abr1;-调用后,SAS将会运行abr1中的这段程序;-示例:建立和调用一个宏;%macro abr1;data tmp11;set car3;run;%mend;%abr1;,CAR:使用宏,建立一个带有宏参数的宏;%macro abr1(yr);包括,yr:是一个宏变量,在宏里的程序中,使用&yr.调用这个宏变量;%abr1(2000):将2000赋值给yr,并调用这个宏程序,调用这个程序后,在宏程序中,&yr.就是2000,CAR:使用宏,Step1:导入数据并对日期进行加工;libname c
37、c“H:sas;data ret;set cc.ret;tr_date=substr(trddt,1,4)*10000+substr(trddt,6,2)*100+substr(trddt,9,2);drop trddt;run;data andate;set cc.andate;an_date=substr(annodt,1,4)*10000+substr(annodt,6,2)*100+substr(annodt,9,2);drop annodt;run;,CAR:使用宏,建立宏程序%macro abr1(yr);-长的宏程序%mend;%abr1(2000);%abr1(2001);,C
38、AR:使用宏,%macro abr1(yr);data ret,CAR:使用宏,*-计算宣告日之后的窗口-;proc rank out=uprt,CAR:使用宏,*-计算宣告日之前的窗口-;proc rank data=tmp,CAR:使用宏,*-使用(-150,-30)窗口估计beta-;data es,CAR:使用宏,*-确定(-30,+30)的窗口-;data aart,CAR:使用宏,*-计算每日的非正常报酬-;data abr,CAR:使用宏,*-把2000年和2001年的AR合并-;data public;set abr2000 abr2001;run;*-计算各年-1,+1的CA
39、R-;%macro sumcar(yr);data car,RET程序,在计算公司的股票业绩时,常用的一个变量时RET,即经市场调整后的、以月度计算的股票年度回报率。一种算法是从5月开始到第2年4月,作为计算BHAR的期间;另一种算法是从1月开始到12月,作为计算BHAR的期间;Ri指考虑现金红利再投资的月个股回报率(CSMAR:考虑现金红利再投资的月个股回报率),Rm指月度市场回报率(CSMAR:考虑现金再投资的月市场回报率(流通市值加权平均法))。,RET程序,连乘的基本算法:由于Logx+logy=logxy,因此,xy=exp(logx+logy);假定我们已经有了stockret数据
40、集,该数据包括了A股1991年4月到2008年12月的如下数据:股票代码(stkcd)、交易月份(trdmnt)、月度个股回报(raw_ret)、月度市场回报(market_ret);任务:计算1991年到2008年各年从5月到次年4月的RET:-由于没有2009年1-4月的交易数据,因此计算的2008年RET是不完整的,到时应该删除;,RET程序,libname cc H:sas;data tmp1;set cc.stockret;month=substr(trdmnt,6,2)+0;lgret=log(1+raw_ret);lgmret=log(1+market_ret);if month
41、=5 then year=substr(trdmnt,1,4)+0;run;proc sort;by stkcd year;run;,RET程序,proc means noprint;var lgret lgmret;by stkcd year;output out=ret0504 sum=tlgret tlgmret;run;data ret0504;set ret0504;ret0504_raw=exp(tlgret)-1;ret0504_adj=exp(tlgret)-exp(tlgmret);run;data ret0504;set ret0504(keep=stkcd year _f
42、req_ ret0504_raw ret0504_adj);where 1991year2008;run;,RET程序,练习:自行计算1992-2008年从1月到12月计算的年度RET。,Proc SQL,Proc sql是一个功能非常强大的多表操作模块;-能从多个数据集中按照制定的条件创建新的数据集;-比如,在Francis et al.(2005,JAE,The market pricing of accruals quality)中,他们首先使用DD模型计算每年操控性应计利润的残差DAC,然后,使用之前5年的DAC的标准差计算盈余质量(Accruals quality,AQ);如何解决这
43、一标准差的计算问题?-题外话:为什么国内从来没有人使用多年DAC的标准差计算AQ?,Proc sql,基本结构,比如,希望从tmp1和tmp2中按照一定条件生成一张新表tmp3;proc sql;creat tmp3 as select distinct a.var1,a.var2,b.var3,b.var4 from tmp1 as a,tmp2 as b where a.var1=b.var1 and a.var2b.var2 order by var1 var2;quit;,Distinct表示删除重复的观测值,可省略,Tmp3的构成,指定tmp1为a,tmp2为b,Where:指定tm
44、p3的生成条件;,Order by:对tmp3排序,Proc SQL,假定现有有一个数据集DAC,包括了1974-2004年美国所有上市公司各年按DD模型计算的DAC,现在要使用之前5年的DAC的标准差来计算各年的AQ;解决思路:-得先构造一个数据集,在这个数据集中,应该这样排列:00001 1999 DAC1995 00001 1999 DAC1996 00001 1999 DAC1997 00001 1999 DAC1998 00001 1999 DAC1999-然后,就可以使用std命令分组求标准差了;,Proc SQL,导入数据libname x H:sas;data dac1;set
45、 x.dac;run;data dac2;set x.dac;run;,之所以倒两次,是因为等下一个要做基本数据,一个是要把之前年度的数据添加过去;,Proc SQL,proc sql;create table AQ(where=(1970=year=2004)as select distinct put(b.gvkey,6.0)|.|put(b.year,4.0)as comb,n(a.dac)as dum,b.gvkey,b.fyenddt,b.year,std(a.dac)as aq from dac1 as a,dac2 as b where a.gvkey=b.gvkey and 0
46、=b.year-a.year=4 group by comb having dum=5 order by gvkey,fyenddt,year;quit;下面是逐条分解说明:,put(b.gvkey,6.0)|.|put(b.year,4.0)as comb,put sth as sth,是指将某变量输出存为另一变量;put(b.gvkey,6.0)是指:输出表b中列变量gvkey,输出格式为6位,不带小数点,假定1997年的公司代码是3978,则put(b.gvkey,6.0)|“.”|put(b.year,4.0)as comb,comb的数值为3978.1997;|连接两个字符值)n(a
47、.dac)as dum,b.gvkey,b.fyenddt,b.year,这里,n(a.dac)是指对数据表a中的dac个数;std(a.dac)as aq 这里,对数据表求标准差,存为aqfrom dac1 as a,dac2 as b dac1作为a,dac2作为b,where a.gvkey=b.gvkey and 0=b.year-a.year=4 指定条件,a中的股票代码应该和b中的相同,且b的year要大于等于a中的year,同时,b中的year和a中的year不能超过4年;比如,b中有9481的1999年数据,则a中9481的1995-1999年的数据将会并入到新的表格AQ中去g
48、roup by comb 按comb分组计算标准差;having dum=5 把那些不足5年的组给删除order by gvkey,fyenddt,year;quit;排序,配对程序,配对是会计研究中的常见方法,即根据一系列的条件对测试样本寻找相应的控制样本;比如,在研究控制权转移对企业业绩影响时,就可能需要用到没有发生控制权转移的样本作为控制样本;一配全:即不寻找特定的控制样本,在所有样本中,设置测试样本变量,比如,若希望检验国有企业的业绩是否同其他企业有系统性的差异,一般是在模型中设置SOE这一虚拟变量;一配多:根据一定的条件,比如,行业相同选择3-5个配对样本,配对程序,一配一:按一定的
49、条件只为一个测试样本寻找一个对应的控制样本;-假定我们有1994-2006年所有A股数据,其中,有一部分是AB股数据,现在,希望按照行业、年度、公司年末总资产规模最为相近三个条件为每一个AB公司每年寻找一个配对的纯A股公司;-比如,万科000002-1998年的配对样本应该是1998年属于房地产行业,且其1998年总资产规模同万科98年总资产规模最为相近的一个纯A股企业;,配对程序,数据集abmatch介绍:1994-2006年A股数据,-stkcd:股票代码;-year:年度;-cross:如果是AB股,则为1,否则为0;-ind:行业代码;-ta:年末总资产;,配对程序,配对思路:对给定的
50、AB股样本,如希望为000002_1994年寻找配对样本,应该首先查找出1994年所有房地产行业的纯A股样本,然后同000002_1994年进行横向合并,求出资产之差的绝对值,然后使用proc rank命令,找出差异最小的对应样本;由于每个AB股每年都要从纯A股样本中查找年度、行业和资产信息,因此上述的程序需要循环很多次;需要注意的是,一个纯A股公司一年的数据只能被配对1此,不能使用两次,比如,0004是纯A股,其1995年数据同两个AB股公司00002和0006的1995年总资产都最为接近,此时,0004_1995只能作为其中1家的配对样本,不能同时作为这两家的配对样本,配对程序,为便于理解