第二讲SAS语句与编程基础_第1页
第二讲SAS语句与编程基础_第2页
第二讲SAS语句与编程基础_第3页
第二讲SAS语句与编程基础_第4页
第二讲SAS语句与编程基础_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第二讲:第二讲:SAS语句及编程基础语句及编程基础 主要教学内容: v SAS语句语句 v SAS算符算符 v 结合实证论文讲解论文写作过程中常用的基础程序结合实证论文讲解论文写作过程中常用的基础程序 SAS语句的分类 uSAS程序由SAS语句构成,SAS语句主要有三类: l 数据步,数据步,以以data开头开头; l 生成新的数据集;生成新的数据集; l 是是SAS语句的精华,使用灵活功能强大。语句的精华,使用灵活功能强大。 l 过程步,以过程步,以proc开头;开头; l 通常以现有的通常以现有的SAS数据集作为操作对象;数据集作为操作对象; l 过程步必须按照模版来做。过程步必须按照模

2、版来做。 l 全局通用语句,可以用在程序中任何地方;全局通用语句,可以用在程序中任何地方; l 但全局通用语句是不可执行语句,只在但全局通用语句是不可执行语句,只在SAS编程的时候起作用。编程的时候起作用。 2 数据步 u通过数据步可以实现的功能如下通过数据步可以实现的功能如下: l 1)创建SAS数据集(SAS数据文件或SAS数据视图); l 2)读取外部数据文件创建SAS数据集; l 3)通过对现有SAS数据集取子集、合并、修改和更新创建新的SAS数据集; l 4)分析、操作或展示数据; l 5)创建新变量; l 6)产生报告、或将文件存储到硬盘或磁带上; l 7)提取信息; l 8)文件

3、管理。 例如: datadata table2; table2; setset table1; table1; runrun; ; 3 过程步 过程步可实现的功能: u使用过程步可以对数据集中的数据进行分析,生成报表或其他结果。 u也可以修改过程步使其只输出所需结果。 u另外,通过过程步也可以展现数据集的信息。 uproc sort:排序:排序 uProc transpose:转置:转置 uproc corr:求相关系数:求相关系数 uProc means:求描述统计量:求描述统计量 uproc univariate:单变量分析:单变量分析 uProc sql:sql过程过程 4 SAS语句

4、uSAS语句就是一系列关键词、SAS名称、算符以及特殊字符的组合。 u所有的SAS语句以英文状态下的分号结尾。 u例:例:有效的有效的SAS语句。语句。 l data data1; /* data为关键词,为关键词,data1为为SAS名名 */ l data _null_; /* _null_为为SAS名名 */(只进行数据操作但不创建数据集)(只进行数据操作但不创建数据集) l put name $8.; /* put为关键词,为关键词,name为为SAS名,名,$8.为输出格式为输出格式*/ l format date yymmdd10.; l proc means data=ResDa

5、t.class; /* proc为关键词,为关键词,means为过程名为过程名 */ l infile “d:ResDatclass.txt”; l do I=1 to 100;(do表示循环)表示循环) l x=y+1; l sumx+x;(x的累加,该程序非常有用)的累加,该程序非常有用) l run; 5 SAS算符 u算术算符算术算符 u举例:举例: datadata class; class; set sashelp.class; x=age*2 2;y=age;y=age* * *3 3; ; z=weight/height; runrun; ; 6 算符算符含义含义举例举例算符算

6、符含义含义举例举例 * * * 乘方乘方A A* * *2.5=A2.5=A2.5 2.5 + + 加加5+C5+C * * 乘乘A A* *B B* *3 3- - 减减C-AC-A / / 除除X/AX/A SAS算符 7 u比较算符比较算符 u比较算符常常需要与比较算符常常需要与if, where, ifelseif, where, ifelse等语句一起使用,后面等语句一起使用,后面 会讲到。会讲到。 7 算符算符含义含义举例举例 = = 等于等于X=YX=Y =不等于不等于X=YX=Y 大于大于XYXY 小于小于XYX= = 大于等于大于等于X=YX=Y = = 小于等于小于等于X=

7、YX= and age=1414; ; ifif sex= sex=MM or height or height180180; ; 其他算符其他算符 8 算符算符等价形式等价形式含义含义算符算符等价形式等价形式含义含义算符算符等价形式等价形式含义含义 ANDAND与与| | OROR或或 NOTNOT非非 算符算符含义含义举例举例算符算符含义含义举例举例 B取最大取最大A AB B |连接连接Stock|CodeStock|Code 实证论文写作的基础程序 本部分内容将介绍论文“do suppliers applaud corporate social performance”的一部分程序,使

8、大家掌握实证论 文写作所需的基本SAS程序,非常实用。 准备工作准备工作: SAS安装:D盘下; E盘下建立文件夹“data”,存入原始xls表数据; E盘下建立文件夹“test”,作为SAS文件的存储路径; 建好永久逻辑库“test”,以文件夹“E:test”为存储路径。 (注:也可以把文件夹建在其他硬盘上,但学习过程中需要修改部分程序) 9 导入数据 用以下程序导入用以下程序导入xlsxls表表basicdata,adbasicdata,ad广告费广告费, mv, mv市值市值, state,int, state,int 无形资产无形资产,managerial,industry,manag

9、erial,industry(共(共7 7张)张)注意修改表名。注意修改表名。 basicdatabasicdata =basic adad广告费广告费=ad mvmv市值市值=mv statestate =state intint无形资产无形资产=int managerialmanagerial = managerial industryindustry = industry 10 导入数据 procproc importimport outout=test.basic =test.basic datafiledatafile= =e:/data/basicdata.xlse:/data/b

10、asicdata.xls DBMS=xls replace; runrun; ; 用以下程序导入用以下程序导入csvcsv表表donatedonate。 procproc importimport outout=test.donate =test.donate datafiledatafile= =e:/data/donate.csve:/data/donate.csv DBMS=csv replace; runrun 11 将表调入work库中 datadata basic; basic; setset test.basic; test.basic; runrun; ; datadata i

11、ndustry; industry; setset test.industry; test.industry; runrun; ; 12 生成年月日 方法一:使用方法一:使用substr函数函数 data ba1; set basic; year=substr(time,1,4)+0; month=substr(time,6,2)+0; if month=12;/*if(where):选择需要的记录:选择需要的记录*/ drop time month;/*删除不要的列*/ run; 13 生成年月日 方法二: data z; set basic; year=year(time); month=

12、month(time); day=day(time); run; 运行上述函数会出错。 原因:time为字符型,而year,month,day函数适用于时间格式(数 值型)的数据。 直接处理从数据库下载的原始数据是时间格式的。 14 改进后的程序 把time转换成数值型: datadata z1; z1;setset basic; basic; newtime=input(time,newtime=input(time,yymmdd10.yymmdd10.);); formatformat newtime newtime yymmdd10.yymmdd10.; ; runrun; ; data

13、data z2; z2;setset z1; z1; year=year(newtime);month=month(newtime);day=dayyear=year(newtime);month=month(newtime);day=day (newtime);(newtime); runrun; ; Tips:字符型和数值型的转换 / /* *把数值型转换成字符型把数值型转换成字符型* */ / 方法一:方法一:datadata z3; z3;setset basic; basic; newasset=input(asset, newasset=input(asset,$32.$32.);

14、); run run; ; 方法二:方法二:datadata z4; z4;setset basic; basic; n= n= ; ; run run; ; data data z5; z5;setset z4; z4; newasset=cat(asset,n); newasset=cat(asset,n); run run; ; 字符型变量用“$n.” 来表示,n表示长度。 cat()函数是一个合 并字符型变量的函数, 在使用这个函数时SAS 会自动把变量默认为字 符型变量 Tips:字符型和数值型的转换 / /* *把字符型转换成数值型把字符型转换成数值型* */ / 方法一:用方法一

15、:用new=inputnew=input(old,n.old,n.) 方法二:方法二:datadata z6; z6;setset z5; z5; newasset1=newasset+ newasset1=newasset+0 0; ; run run; ; 数值型变量用“n.”来 表示,n表示长度。 sas在遇到数学运算符 时会自动把运算符两边 的数据类型默认为数值 型 生成行业哑变量 datadata industry1; industry1; setset industry; industry; ind=substr(industry,ind=substr(industry,1 1,

16、,1 1);); ifif ind= ind=AA thenthen ind1= ind1=1 1; ;elseelse ind1= ind1=0 0; ; ifif ind= ind=BB thenthen ind2= ind2=1 1; ;elseelse ind2= ind2=0 0; ; ifif ind= ind=CC thenthen ind3= ind3=1 1; ;elseelse ind3= ind3=0 0; ; ifif ind= ind=DD thenthen ind4= ind4=1 1; ;elseelse ind4= ind4=0 0; ; ifif ind= i

17、nd=EE thenthen ind5= ind5=1 1; ;elseelse ind5= ind5=0 0; ; ifif ind= ind=FF thenthen ind6= ind6=1 1; ;elseelse ind6= ind6=0 0; ; ifif ind= ind=GG thenthen ind7= ind7=1 1; ;elseelse ind7= ind7=0 0; ; ifif ind= ind=HH thenthen ind8= ind8=1 1; ;elseelse ind8= ind8=0 0; ; ifif ind= ind=JJ thenthen ind9=

18、 ind9=1 1; ;elseelse ind9= ind9=0 0; ; ifif ind= ind=KK thenthen ind10= ind10=1 1; ;elseelse ind10= ind10=0 0; ; ifif ind= ind=LL thenthen ind11= ind11=1 1; ;elseelse ind11= ind11=0 0; ; ifif ind= ind=MM thenthen ind12= ind12=1 1; ;elseelse ind12= ind12=0 0; ; ifif ind= ind=II or ind= or ind=. or in

19、d= or ind= thenthen deletedelete; ; runrun; ; 18 生成年度哑变量 datadata industry2; industry2;setset industry1; industry1; if year=20062006 thenthen year1= year1=1 1; ;elseelse year1= year1=0 0; ; if year=20072007 thenthen year2= year2=1 1; ;elseelse year2= year2=0 0; ; if year=20082008 thenthen year3= yea

20、r3=1 1; ;elseelse year3= year3=0 0; ; if year=20092009 thenthen year4= year4=1 1; ;elseelse year4= year4=0 0; ; runrun; ; 19 方法二:宏命令 /*生成行业哑变量*/ data z;set industry; ind=substr(industry,1,1); if ind=I or ind=. or ind= then delete; run; /*生成序列变量*/ proc sort data=z;by ind;run; data z1;set z; by ind; r

21、etain num 0;num=num;/;/* *num=num+0num=num+0的省略形式的省略形式* */ / if first.ind then num=num+1; run;/*first.与与last.*/ 20 方法二:宏命令 %macro%macro creat;creat; / /* *创建数据集宏创建数据集宏* */ / data z2;set z1;data z2;set z1; %do%do i= i=1 1 %to %to 1212; ; indselect; when ;select; when (num=(num=%eval%eval( ; otherwise

22、 ind ; end;end; %end%end; ; ; ; run;run; %mend%mend; ; optionsoptions mprintmprint; ; % %creat;creat; datadata z3; z3;setset z2; z2;dropdrop num; num;runrun; ; 21 方法二:宏命令 /*生成年度哑变量*/ procproc sortsort datadata=z3;=z3; byby year; year; runrun; ; datadata z4; z4;setset z3; z3; byby year; year; retainr

23、etain num num 0 0;num=num;num=num; ifif first.year first.year thenthen num=num+ num=num+1 1; ; runrun; ; 22 方法二:宏命令 %macro%macro creat;creat; data z5;set z4;data z5;set z4; %do%do i= i=1 1 % to % to 4 4; ; yearselect; when ;select; when (num=(num=%eval%eval( ; otherwise year ; end;end; %end%end; ; ;

24、 ; run;run; %mend%mend; ; optionsoptions mprintmprint; ; % %creat;creat; 23 方法三:array数组 datadata z; z;setset industry;ind=substr(industry, industry;ind=substr(industry,1 1, ,1 1);); ifif ind= ind=II or ind= or ind=. or ind= or ind= thenthen deletedelete; ; runrun; ; procproc sortsort datadata=z;=z;b

25、yby ind; ind;runrun; ; datadata z1; z1;setset z; z; byby ind; ind; retainretain num num 0 0;num=num;/;num=num;/* *num=num+0num=num+0的省略形式的省略形式* */ / ifif first.ind first.ind thenthen num=num+ num=num+1 1; ; runrun; ; procproc sortsort datadata=z1;=z1;byby year; year;runrun; ; datadata z2; z2;setset

26、z1; z1; byby year; year; retainretain obs obs 0 0;obs=obs;obs=obs; ifif first.year first.year thenthen obs=obs+ obs=obs+1 1; ; runrun; ; 24 方法三:array数组 datadata z3; z3;setset z2; z2; arrayarray in( in(1212) in1-in12;) in1-in12; dodo i= i=1 1 toto 1212; ; ifif i=num i=num thenthen in(i)= in(i)=1 1; ;

27、elseelse in(i)= in(i)=0 0; ; endend; ; dropdrop i num; i num; runrun; ;/ /* *数组名称不能与已存在的变量名称重复数组名称不能与已存在的变量名称重复* */ / / /* *生成生成in1-in12in1-in12* */ / 25 一、分别生成行业哑变量和年度哑变量一、分别生成行业哑变量和年度哑变量 方法三:array数组 datadata z3; z3;setset z3; z3; arrayarray y( y(4 4) y1-y4; ) y1-y4; dodo t= t=1 1 toto 4 4; ; ifif

28、t=obs t=obs thenthen y(t)= y(t)=1 1; ;elseelse y(t)= y(t)=0 0; ; endend; ; DropDrop t obs; t obs; runrun; ;/ /* *数组名称不能与已存在的变量名称重复数组名称不能与已存在的变量名称重复* */ / / /* *y1-y4y1-y4* */ / 26 方法三:array数组 datadata z3; z3;setset z2; z2; arrayarray in( in(1212) in1-in12;) in1-in12; arrayarray y( y(4 4) y1-y4; ) y1

29、-y4; dodo i= i=1 1 toto 1212; ; dodo t= t=1 1 toto 4 4; ; ifif t=obs t=obs thenthen y(t)= y(t)=1 1; ;elseelse y(t)= y(t)=0 0; ; endend; ; ifif i=num i=num thenthen in(i)= in(i)=1 1; ;elseelse in(i)= in(i)=0 0; ; endend; ;/ /* *dodo循环的嵌套循环的嵌套* */ / dropdrop i t num obsi t num obs; ; runrun; ;/ /* *数组

30、名称不能与已存在的变量名称重复数组名称不能与已存在的变量名称重复* */ / (生成(生成y1-y4,in1-in12y1-y4,in1-in12) 27 二、用嵌套循环语句同时生成行业哑变量和年度哑变量二、用嵌套循环语句同时生成行业哑变量和年度哑变量 Delete Keep datadata int; int; setset ; ; runrun; ; datadata int1; int1;setset int; int; year=substr(time,year=substr(time,1 1, ,4 4)+)+0 0; ; month=substr(t

31、ime,month=substr(time,6 6, ,2 2)+)+0 0; ; ifif month= month=1212 thenthen deletedelete; ; ifif intasset= intasset=. . thenthen intasset= intasset=0 0; ; keepkeep stock year intasset; stock year intasset; runrun; ; 28 生成变量的上期值 步骤一:重命名步骤一:重命名 datadata int2; int2; setset int1; int1; year=year+year=year

32、+1 1; ; renamerename intasset=sqintasset; intasset=sqintasset; labellabel intasset=sqintasset; intasset=sqintasset; runrun; ; 29 生成变量的上期值 步骤二:排序步骤二:排序 procproc sortsort datadata=int1;=int1; byby stock year; stock year;runrun; ; procproc sortsort datadata=int2;=int2; byby stock year; stock year;runru

33、n; ; 30 生成变量的上期值 步骤三:合并步骤三:合并( (所有数据集中合并关键词的数值格式必须一所有数据集中合并关键词的数值格式必须一 致致) ) datadata int3; int3; mergemerge int1 int2; int1 int2; byby stock year; stock year; dtint=intasset-sqintasset;dtint=intasset-sqintasset; ifif 20052005yearyear20102010; ; runrun; ; 31 用proc sql纵向求和 datadata donate; donate;set

34、set test.donate; test.donate;runrun; ; / /* *在在proc sqlproc sql语句中使用统计函数语句中使用统计函数* */ / procproc sqLsqL; ;createcreate tabletable do1 do1 asas selectselect * *,sum(amount) ,sum(amount) asas donate donate fromfrom donate donate groupgroup byby stock, year; stock, year; quitquit; ; procproc sortsort n

35、odupkeynodupkey datadata=do1;=do1; byby stock year; stock year; runrun; ;/ /* *删除重复的观测值删除重复的观测值* */ / 32 datadata do2; do2;setset do1; do1; keepkeep stock year donate; stock year donate;runrun; ; datadata do3; do3;setset do2; do2; rename donate=sqdonate; year=year+1 1; ;runrun; ; procproc sortsort d

36、atadata=do2;=do2;byby stock year; stock year;runrun; ; procproc sortsort datadata=do3;=do3;byby stock year; stock year;runrun; ; 33 If 和 where datadata do4; do4; mergemerge do3 do2; do3 do2; byby stock year; stock year; dtdonate=donate-sqdonate;dtdonate=donate-sqdonate; ifif donate= donate=. . and d

37、onate= and donate=0 0; ; wherewhere 20052005yearyear20102010; ; runrun; ; datadata z; z;setset do4; do4;ifif donate= donate=. . or donate= or donate=0 0 ; ;runrun; ;/ /* *检检 验表验表do4do4中中donatedonate的缺失值是否都删除的缺失值是否都删除* */ / 34 纵向合并 用if 和where子句可以将数据表纵向拆分。例如:从数 据集do4中拆分出2006年和2007年两个子样本: datadata x1;

38、x1;setset do4; do4; wherewhere year= year=20062006; ;runrun; ; datadata x2; x2;setset do4; do4; wherewhere year= year=20072007; ;runrun; ; 若要将两个子样本纵向合并,则: datadata x3; x3;setset x1 x2; x1 x2;runrun; ; 注意:纵向合并的各数据集,它们所含有的变量必须完全相同。 否则以空值表示。 datadata mv; mv;setset test.mv; test.mv;runrun; ; datadata ad

39、; ad;setset test.ad; test.ad;runrun; ; datadata managerial; managerial;setset test.managerial; test.managerial;runrun; ; datadata state; state;setset test.state; test.state; renamerename tshare=tshare1; tshare=tshare1;runrun; ; / /* *因为表因为表statestate和和managerialmanagerial中都有中都有tsharetshare变量,为了变量,为了

40、 防止合并时出错,将其中一个改名防止合并时出错,将其中一个改名* */ / 36 合并表(merge生成并集) procproc sortsort datadata=ba1;=ba1;byby stock year; stock year;runrun; ; procproc sortsort datadata=industry2;=industry2;byby stock year; stock year;runrun; ; procproc sortsort datadata=int3;=int3;byby stock year; stock year;runrun; ; procproc

41、 sortsort datadata=mv;=mv;byby stock year; stock year;runrun; ; procproc sortsort datadata=ad;=ad;byby stock year; stock year;runrun; ; procproc sortsort datadata=managerial;=managerial;byby stock year; stock year;runrun; ; procproc sortsort datadata=state;=state;byby stock year; stock year;runrun;

42、; datadata m1; m1; mergemerge ba1 industry2 int3 mv ad managerial state; ba1 industry2 int3 mv ad managerial state; byby stock year; stock year; runrun; ; 37 Data test.m1;set m1;run; Data test.do4;set do4;run; Proc sql合并生成交集 procproc SQLSQL; ; createcreate tabletable m2 m2 asas selectselect do4.dona

43、te,do4.dtdonate, do4.donate,do4.dtdonate, m1.m1.* * fromfrom do4,m1 do4,m1 wherewhere do4.stock=m1.stock do4.stock=m1.stock andand do4.year=m1.year; do4.year=m1.year; quitquit; ; procproc sortsort nodupkeynodupkey datadata=m2;=m2; byby stock year; stock year;runrun; ; / /* *为防止合并时产生重复的观测值为防止合并时产生重复的

44、观测值* */ / 39 变量计算 datadata m3; m3;setset m2; m2; csp= csp=100100* *donate/asset;donate/asset; lncsp=log(donate); lncsp=log(donate); size=log(mv); size=log(mv); lev=debt/asset; lev=debt/asset; tc=payable/asset; tc=payable/asset; purchs=(cashpaid+payable)/asset; purchs=(cashpaid+payable)/asset; loan=(

45、shortdebt+longdebt)/asset; loan=(shortdebt+longdebt)/asset; indpdt=indirector/director; indpdt=indirector/director; mshare=mshare/tshare; mshare=mshare/tshare; runrun; ; 40 生成变量的分位数 procproc univariateunivariate datadata=m3;=m3; varvar csp tc size lev roa purchs loan indpdt csp tc size lev roa purch

46、s loan indpdt mshare; mshare; outputoutput outout=m4 =m4 pctlptspctlpts= =1 1 9999 pctlprepctlpre=csp tc size lev roa purchs loan indpdt =csp tc size lev roa purchs loan indpdt msharemshare pctlnamepctlname=p1 p99;=p1 p99; quitquit; ; / /* *可以用该方法生成任意分位数,修改可以用该方法生成任意分位数,修改pctlptspctlpts后的数后的数 字即可字即可

47、* */ / 41 datadata m4; m4;setset m4;idd= m4;idd=1 1; ;runrun; ; datadata m3; m3;setset m3;idd= m3;idd=1 1; ;runrun; ; datadata m5; m5;mergemerge m4 m3; m4 m3;byby idd; idd;runrun; ; / /* *合并包含分位数的表合并包含分位数的表m4m4和主表和主表m3m3,创造合并关键字,创造合并关键字 iddidd* */ / 42 异常值处理 datadata m6; m6;setset m5; m5; ifif csp=c

48、spp1 and csp= csp=cspp1 and csp=. . thenthen csp=cspp1; csp=cspp1; ifif tc=tcp1 and tc= tc=tcp1 and tc=. . thenthen tc=tcp1; tc=tcp1; ifif size=sizep1 and size= size=sizep1 and size=. . thenthen size=sizep1; size=sizep1; ifif lev=levp1 and lev= lev=levp1 and lev=. . thenthen lev=levp1; lev=levp1; if

49、if roa=roap1 and roa= roa=roap1 and roa=. . thenthen roa=roap1; roa=roap1; ifif purchs=purchsp1 and purchs= purchs=purchsp1 and purchs=. . thenthen purchs=purchsp1; purchs=purchsp1; ifif loan=loanp1 and loan= loan=loanp1 and loan=. . thenthen loan=loanp1; loan=loanp1; ifif indpdt=indpdtp1 and indpdt

50、= indpdt=indpdtp1 and indpdt=. . thenthen indpdt=indpdtp1; indpdt=indpdtp1; ifif mshare=msharep1 and mshare= mshare=cspp99 and csp= csp=cspp99 and csp=. . thenthen csp=cspp99; csp=cspp99; ifif tc=tcp99 and tc= tc=tcp99 and tc=. . thenthen tc=tcp99; tc=tcp99; ifif size=sizep99 and size= size=sizep99

51、and size=. . thenthen size=sizep99; size=sizep99; ifif lev= lev=1 1 thenthen deletedelete; ;/ /* *剔除资不抵债公司剔除资不抵债公司* */ / ifif roa=roap99 and roa= roa=roap99 and roa=. . thenthen roa=roap99; roa=roap99; ifif purchs=purchsp99 and purchs= purchs=purchsp99 and purchs=. . thenthen purchs=purchsp99; purch

52、s=purchsp99; ifif loan=loanp99 and loan= loan=loanp99 and loan=. . thenthen loan=loanp99; loan=loanp99; ifif indpdt=indpdtp99 and indpdt= indpdt=indpdtp99 and indpdt=. . thenthen indpdt=indpdtp99; indpdt=indpdtp99; ifif mshare=msharep99 and mshare= mshare=msharep99 and mshare=. . thenthen mshare=msh

53、arep99; mshare=msharep99; runrun; ; 44 异常值处理方法二:proc univariate procproc univariateunivariate datadata=m6 =m6 noprintnoprint; ; varvar lncsp; lncsp; outputoutput outout=z =z p1p1=p1str =p1str p99p99=p99str;=p99str; runrun; ; procproc sqlsql; ; selectselect p1str p1str intointo: myp1 : myp1 fromfrom

54、z; z; selectselect p99str p99str intointo: myp99 : myp99 fromfrom z; z; quitquit; ; datadata m7; m7;setset m6; m6; ifif lncsp lncsp%sysevalf%sysevalf( ifif lncsp lncsp%sysevalf%sysevalf( runrun; ; 缺点:每次只能处理一个 变量,在变量较多时会生 成很多中间数据集。 优点:不用将分位数合并 到主表上去,减少了主表 中的变量数目。 生成上期值:lag proc sort data=m7;by stock year;quit; data m8;set m7; by stock year; sqasset=lag(asset);if first.stock then sqasset=.; sqdonate=lag(donate);i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论