收藏 分销(赏)

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

上传人:xrp****65 文档编号:14187014 上传时间:2026-07-07 格式:PPT 页数:92 大小:910KB 下载积分:10 金币
下载 相关 举报
sas_在财务、会计研究中的运用.ppt_第1页
第1页 / 共92页
sas_在财务、会计研究中的运用.ppt_第2页
第2页 / 共92页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,会计与财务研究中常见问题的,SAS,实现,会计与财务研究中的常用软件,SAS,-,面向多数据处理,功能强大,但上手难度较大;,-,识别汉字;,-,特别适合于数据的初步整理阶段(程序可保存,容易再现历史);,STATA,-,软件小巧,便于安装,且上手较容易;,-,回归和检验功能非常强大;,-,升级快,命令包可以随时在网上下载,支持自我学习;,研究实践:,SAS,(数据整理),+STATA,(回归检验),会计与财务研究中的常用软件,会计研究中的,STATA,运用,-Clive Lennox,的个人网站,ihome.ust.hk/accl/Phd_teaching.htm,-,为中山大学会计系所授课程,课件和演示用数据,课程主要内容,SAS,的一些基本操作;,分组回归程序:计算,DA,;,CAR,程序:不使用宏和使用宏;,计算股票年度业绩,RET,的程序;,Proc SQL,:多表合并程序,-,配对程序;,参考书,高惠璇等编译,,SAS,系统,BASE SAS,软件使用手册,中国统计出版社,,1997,;,高惠璇等编译,,SAS,系统,SAS/STAT,软件使用手册,中国统计出版社,,1997,;,这两本书类似于字典,用来查,而不是用来读;,学,SAS,的最佳方法:,-,对照已有的程序和数据一步一步地跑,碰到不懂的命令(有时可以不求甚解),便去查书;,SAS,的基本操作,创建新的数据集并输出,-,打开,SAS,,在编辑器中写入程序:,data wghtclub;input idno 1-4 name$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 1331 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 datafile=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.,将文本变量转化为数值变量,直接让文本变量加,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:SASsolvency.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)tmp2;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_ratio,产生一个,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=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,日期所间隔的天数,然后除于,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,日期函数,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;,对数据进行,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,分年度进行分析),;,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,分位数,则该样本的值被强制指定为,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 current 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,行业分类太细,我们只想使用,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 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-median_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,程序,假定我们已经有了,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(keep=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,的,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 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;,outest:,把回归模型的估计结果(参数)保存在,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 tmp9;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 da_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:,计算业绩调整的,DA,proc 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_perf,,即把回归残差命名为,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;,要求各年各行业的样本数至少不小于,5,n,是一个统计量,统计各组的观测值个数;,计算,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,程序,假定我们已经有了计算,CAR,的两个数据集,一个是日个股回报数据,(RET),一个是个股年报宣告日数据(,Andate):,RET,数据集包括:,stkcd,:股票代码,Traddt,:股票交易日;,Raw_ret:,每只股票每个交易日的日个股回报(考虑,现金红利再投资的日个股回报率);,Market_ret,:每日的市场回报(,考虑现金红利再投,资的日市场回报率(流通市值加权平均法),),Andate,数据集包括:,stkcd,:股票代码,year:,年报年度;,annodt:,年报宣告日;,CAR,程序,任务:计算,2000,和,2001,年年报宣告日前后共,3,天的,CAR;,-,方法一:不使用宏,但需要每年计算一次;,-,方法二:使用宏,可以一次得到多年宣告日的,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=(year=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,data=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;,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=t1=0,;run;,proc rank,out=after;,var t;,ranks 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,和,beta2000,data car2000;merge car beta2000;,by stkcd;,run;,step 6:,计算(-30,30)每天的AR,data car2000;set car2000;,ar=raw_ret-(alpha+beta*market_ret);,mr=raw_ret-market_ret;,run;,CAR,程序:不使用宏,step7:,计算,-1,,,+1,三天的,CAR,data tmp10;set car2000(where=(-1=t1=0;,run;,data uprt,CAR,:使用宏,*,-,计算宣告日之前的窗口,-;,proc rank data=tmp,var t;,ranks t1;,by stkcd;,where t0;,run;,data downrt,*-,纵向合并宣告日之前和之后的窗口,-;,data art,proc sort;,by stkcd tr_date;,run;,CAR,:使用宏,*-,使用(,-150,,,-30,)窗口估计,beta-;,data es,proc reg,noprint,outest,=beta,model raw_ret=market_ret/adjrsq;,by stkcd;,run;,data abeta,alpha=intercept;,beta=market_ret;,n=_p_+_edf_;,adjrsq=_adjrsq_;,keep stkcd alpha beta n adjrsq;,proc sort;by stkcd;run;,CAR,:使用宏,*-,确定(,-30,,,+30,)的窗口,-;,data aart,if-30=t1=30;,proc sort;by stkcd;run;,*-,合并,beta,系数,-;,data abr,by stkcd;,if a=1;run;,CAR,:使用宏,*-,计算每日的非正常报酬,-;,data abr,ur=raw_ret-(alpha+beta*market_ret);,mr=raw_ret-market_ret;,run;,%mend;,%abr1(2000);,%abr1(2001);,CAR,:使用宏,*-,把,2000,年和,2001,年的,AR,合并,-;,data public;set abr2000 abr2001;run;,*-,计算各年,-1,,,+1,的,CAR-;,%macro,sumcar(yr);,data car,if year=,proc means data=car,var mr ur;,by stkcd;,output out=sumcar,data sumcar,year=,%mend;,%sumcar(2000);,%sumcar(2001);,data sumcar;set sumcar2000 sumcar2001;run;,RET,程序,在计算公司的股票业绩时,常用的一个变量时,RET,,即经市场调整后的、以月度计算的股票年度回报率。,一种算法是从,5,月开始到第,2,年,4,月,作为计算,BHAR,的期间;,另一种算法是从,1,月开始到,12,月,作为计算,BHAR,的期间;,Ri,指考虑现金红利再投资的月个股回报率(,CSMAR:,考虑现金红利再投资的月个股回报率),,Rm,指月度市场回报率(,CSMAR:,考虑现金再投资的月市场回报率,(,流通市值加权平均法,),)。,RET,程序,连乘的基本算法:,由于,Logx+logy=logxy,因此,,xy=exp(logx+logy),;,假定我们已经有了,stockret,数据集,该数据包括了,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=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 _freq_ 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,),;,如何解决这一标准差的计算问题?,-,题外话:为什么国内从来没有人使用多年,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,:指定,tmp3,的生成条件;,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 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=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.dac)as dum,b.gvkey,b.fyenddt,b.year,这里,,n(a.dac),是指对数据表,a,中的,dac,个数;,std(a.dac)as aq,这里,对数据表求标准差,存为,aq,from dac1 as a,dac2 as b,dac1,作为,a,dac2,作为,b,where,a.gvkey=b.gvkey
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服