sas_在财务、会计研究中的运用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

会计与财务研究中常见问题的SAS实现会计与财务研究中的常用软件•SAS-面向多数据处理,功能强大,但上手难度较大;-识别汉字;-特别适合于数据的初步整理阶段(程序可保存,容易再现历史);•STATA-软件小巧,便于安装,且上手较容易;-回归和检验功能非常强大;-升级快,命令包可以随时在网上下载,支持自我学习;•研究实践:SAS(数据整理)+STATA(回归检验)会计与财务研究中的常用软件•会计研究中的STATA运用-CliveLennox的个人网站~accl/Phd_teaching.htm-为中山大学会计系所授课程·课件和演示用数据课程主要内容•SAS的一些基本操作;•分组回归程序:计算DA;•CAR程序:不使用宏和使用宏;•计算股票年度业绩RET的程序;•ProcSQL:多表合并程序-配对程序;参考书•高惠璇等编译,SAS系统BASESAS软件使用手册,中国统计出版社,1997;•高惠璇等编译,SAS系统SAS/STAT软件使用手册,中国统计出版社,1997;•这两本书类似于字典,用来查,而不是用来读;•学SAS的最佳方法:-对照已有的程序和数据一步一步地跑,碰到不懂的命令(有时可以不求甚解),便去查书;SAS的基本操作•创建新的数据集并输出-打开SAS,在编辑器中写入程序:datawghtclub;inputidno1-4name$6-24team$strtwghtendwght;loss=strtwght-endwght;cards;1023DavidShawred1891651049AmeliaSerranoyellow1451241219AlanNancered2101921246RaviSinhayellow1941771078AshleyMcKnightred1271181221JimBrownyellow220.1095SusanStewartblue1351271157RoseCollinsgreen1551411331JasonSchockblue1871721067KanokoNagasakagreen1351221251RichardRoseblue181166;run;procprintdata=wghtclub;title'FitnessCenterWeightClub';run;-结果:在SAS逻辑库的Work中,就会出现wghtclub数据集;SAS的基本操作•将EXCEL数据导入SAS-比如,要将H盘SAS目录中的profit.xls文件导入SAS,并命名为profit;-打开SAS,在编辑器中写入程序:procimportout=profitdatafile=H:\SAS\profit.xlsdbms=excel2000replace;run;-结果:在SAS逻辑库的Work中,就会出现profit数据集;SAS的基本操作•右键点开profit数据集查看数据集情况;•将Accper转变成年度;dataprofit;setprofit;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.·将文本变量转化为数值变量,直接让文本变量加0即可;Datax2;setx1;对x1数据进行加工,然后保存为X2;SAS的基本操作•数据排序-对profit数据按照stkcd和year进行排序;procsortdata=profitnodupkey;bystkcdyear;run;•变量改名dataprofit1;setprofit;renamestkcd=code;run;SAS的基本操作•数据横向合并-比如,要将Profit和solvency进行merge:先将solvency.xls文件导入SASprocimportout=solvencydatafile=“H:\SAS\solvency.xlsdbms=excel2000replace;run;datasolvency;setsolvency;year=substr(accper,1,4)+0;run;procsort;bystkcdyear;run;在对两个或多个数据集进行merge时,需要首先按照关键变量(如公司代码和年度)进行排序;省略时,默认对最近的数据集进行排序;SAS的基本操作•数据横向合并datafin_ratio;mergeprofit(in=a)solvency;bystkcdyear;ifa;run;注意:datax1;mergetmp1(in=a)tmp2;byvar1var2;ifa;run-表示已tmp1为基础进行合并,合并后的数据集样本数同tmp1相同;datax1;mergetmp1tmp2;byvar1var2;run-包括了tmp1和tmp2的所有观测值;datax1;mergetmp1(in=a)tmp2(in=b);byvar1var2;ifa=1andb=1;run-只包括tmp1和tmp2中共有的观测值;SAS的基本操作•纵向合并(append)datax1;settmp1tmp2;Run;-SAS自己会去找对应的变量;SAS的基本操作•产生新的虚拟变量比如,要从fin_ratio产生一个2006以后的虚拟变量,即年度在2006年后的,取值为1,否则为0;则:datafin_ratio;setfin_ratio;after2006=0;ifyear=2006thenafter2006=1;run;SAS的基本操作•剔除变量空缺的观测值;•CSMAR数据集中,有些变量空缺,导入SAS为“.”,有些无点,为一个空格,则可以通过如下命令剔除这些数据缺失的观测值:-比如,希望剔除fin_ratio数据中,ROS缺失的样本;procsortdata=fin_ratio;byros;run;datatmp1;setfin_ratio;ifros=.orros=thendelete;run;SAS的基本操作•假如要把ROS,ROA,ROE的缺失样本同时删除:datatmp2;setfin_ratio;ifros+roa+roe=.thendelete;run;SAS的一些基本算符:+-*/=等于~=不等于==SAS的函数分类可以参见高惠璇SASBASE1997pp.70-74SAS的基本操作•SAS日期函数•在CSMAR的数据库中,导出的日期文件一般为yyyy-mm-dd,如1999-12-31日,这是一个文本格式,那么,如何将其转化为标准的日期格式呢?•比如,我们经常要计算公司上市年龄,上市公司年龄等于各个财政年度末减去IPO日期所间隔的天数,然后除于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日期都是这天)的时间距离;SAS的基本操作•SAS日期函数datatmp1;setfin_ratio(keep=stkcdaccperros);ipodate=mdy(5,7,1990);run;datatmp2;settmp1;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;对数据进行winsorize处理•任务:对fin_ratio中的ROS,ROE,ROA,Current和Acid按上下1%进行winsorize处理;datatmp1;setfin_ratio;d=1;run;procmeansnoprint;varroaroeroscurrentacid;byd;outputout=tmp2(drop=_freq__type_)p1=x1-x5p99=y1-y5;Procmeans:对数据进行描述性统计;noprint:统计结果不在SAS中显示;Var:指定需要分析的变量;by:按什么条件进行分析(e.g.,byyear,分年度进行分析);Outputout=tmp2:将分析结果保存于tmp2中;p1:变量1分位数的值p1=x1-x5:5个变量1分位数的值(-不是减号);p99:变量99分位数的值;对数据进行winsorize处理datatmp3;mergetmp1tmp2;byd;arrayz{1:5}roaroeroscurrentacid;arrayx{1:5}x1-x5;arrayy{1:5}y1-y5;doi=1to5;ifz[i]x[i]andz[i]~=.thenz[i]=x[i];ifz[i]y[i]thenz[i]=y[i];end;dropidx1-x5y1-y5;run;Winsorize的原理:如果一个样本某变量的值大于该变量的99分位数,则该样本的值被强制指定为99分位数的值;类似的,如果一个样本某变量的值小于该变量的1分位数,则该样本该变量的值被强制指定为1分位数的值;Array:指定一组变量(向量);如这里:z[1]便为roa,x[1]为x1,即roa的1分位数;y[1]为y1,即roa99分位数;由于需要winsorize五个变量,因此需要循环5次;对样本进行描述性统计•希望对一组样本进行描述性统计,包括均值、中位数、标准差等,可以采用procmeans和procunivariate模块;•比如,希望对fin_ratio进行描述性统计:procmeansdata=fin_ratio;varroaroeroscurrentacidafter2006;run;对样本进行描述性统计•如果希望按年度或按行业分组进行描述性统计:procsortdata=fin_ratio;byyearindcd;run;procmeansdata=fin_ratio;varroaroeroscurrentacidafter2006;byyearindcd;run;对样本进行描述性统计•如果希望保存每组样本的某个统计量(如均值,中位数或者标准差),则可以使用如下程序:•比如,希望计算1990-2006年按年和行业均值(中位数)调整后的ROA和ROS,则程序如下:*由于indcd行业分类太细,我们只想使用22个行业,即C类分到二级代码,其余都使用一级代码datatmp1;setfin_ratio(keep=stkcdyearindcdroaros);ifsubstr(indcd,1,1)=Cthenind=substr(indcd,1,2);ifsubstr(indcd,1,1)~=Cthenind=substr(indcd,1,1);dropindcd;run;对样本进行描述性统计*产生各年、各行业ROA和ROS的均值和中位数;procsortdata=tmp1;byyearind;run;procmeansnoprint;varroaros;byyearind;outputout=tmp2mean=mean_roamean_rosmedian=median_roamedian_ros;run;

1 / 92
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功