SAS综合题1-15_第1页
SAS综合题1-15_第2页
SAS综合题1-15_第3页
SAS综合题1-15_第4页
SAS综合题1-15_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、SAS金融数据处理综合练习题1. 创建一包含10000个变量(X1-X10000),100个观测值的SAS数据集。分别用DATA步,DATA步数组语句和IML过程实现。1. Drop=i2. 删除变量i,否则就会有10001个变量。3. i会扫描到第101次。4. Retain语句给变量付初值。Data步:data p1(drop=i);retain x1-x10000 0;do i=1 to 100;output;end;run;data步数组:Array:隐含下标数组,数值变量,默认下标变量_i_ Do over, 隐含下标数组元素执行do组Ranuni:随机数函数,返回来自均匀分布的随机

2、变量。Output:输出观测到数据集中,p157data p1(drop=i);array x x1-x10000;do i=1 to 100;do over x;x=ranuni(0);end;output;end;run;宏:%macro names(name,number,obs);data a;%do i=1 %to &obs;%do n=1 %to &number;&name&n=1;%end;output;%end;Run;%mend names;%names(x, 10000,100);2. 多种方法创建包含变量X的10000个观测值的SAS数据集

3、。初值为0:data a;retain x 0;do i=1 to 10000;drop i;output;end;run;随机数:data a (drop=i);do i=1 to 10000;x=ranuni(0);output;end;run;读入其他数据文件:(先创建数据文件a,再从中读取)data a (drop=i);do i=1 to 10000;x=ranuni(0);output;file 'x:a.txt'put x;end;run;data b;infile 'x:a.txt'input x;output;run;读入其他数据集:data

4、a;do i=1 to 10000;x=ranuni(0);output;end;run;data b;set a;drop i;output;run;3. 数据集A中日期变量DATE包含有缺失值,创建包含日期变量DATE的数据集B,并填充开始到结束日之间的所有日期值。【先在sas中建立逻辑库Resdat的链接,便于数据集的引用】data a;/*可用用stk000001数据集*/set Resdat.stk000001;if date=. then delete;/*要排序之前必须先把缺失值去掉,否则缺失值会排在最前面*/run;proc sort data=a; /*set语句前必须要排序

5、*/by date;data b(drop=date);set a end=end;/*文件结束的临时变量,不包含在数据集中。前面的end是函数,后面的end是变量名*/by date;retain start; /*没有retain语句则start的值为缺失*/if _n_=1 then start=date;if end then do; /*也可以写if end then do last=date;*/last=date;output;end;run;/*此时只有一个观测,start值为date最小值,last值为date最大值*/data b(keep=date);/*只留date一个

6、变量*/informat date yymmdd10.;format date yymmdd10.;set b;do date=start to last;output;end;run;如图,缺失的日期被补充完整,观测数从4056变为6167.方法二:data a;set a nobs=nobs;call symput('temp',nobs);/*查找a的观测值个数,并赋值给宏变量temp*/if date=. then delete;/*要排序之前必须先把缺失值去掉,否则缺失值会排在最前面*/run;proc sort data=a; /*set语句前必须要排序*/by d

7、ate;data b(drop=date1);set a(rename=(date=date1) end=end;/*文件结束的临时变量,不包含在数据集中*/by date1;retain date; /*没有retain语句则date的值为缺失*/if _n_=1 then date=date1; /*查找第一个观测值*/else delete;run;data b(keep=date);informat date yymmdd10.;format date yymmdd10.;set b;do n=1 to &temp;date=date+1;output;end;run;/*方法

8、二并不能产生开始和截止日之间所有日期,只能产生和观测值相等的天数的日期,因为&temp是等于观测值的*/如图,仍然是4056个观测。4. 创建包含日期变量DATE的SAS数据集,日期值从1900年1月1日到2000年1月1日。data c(keep=date);format date ddmmyy10.;sdate='01jan1900'd;edate='01jan2000'd;do date=sdate to edate;output;end;run;5. 利用随机数函数RANUNI对某数据集设计返回抽样方案。data a;set resdat.cla

9、ss;keep name;run;data b;set a nobs=nobs;/*记录读入数据集的观测总数*/ran=ceil(nobs*ranuni(1);/*ceil()返回大于等于自变量的最小整数值,1可以随便取值,只要大于0*/run;proc sort data=b;by ran;data c;set b;if _n_<=5;run;【n个人,随机赋予编号,重新排序后取前5个】方法二:data rv ;retain _seed_ 0;do _i_=1 to 5;n=int(19*ranuni(_seed_);/*int是取整数部分*/output;end;drop _seed

10、_ _i_;proc sort data=RV;by n;run;data a;set resdat.class;n=_N_;run;data sample;merge a rv(in=id); /*合并的时候在数据集rv中的n才会被合并*/if id;by n;run;【随机生成5个数,给原数据集编号n,通过Merge挑选对应序号的观测】6. 利用随机数函数RANUNI对某数据集设计不返回抽样方案。data a;set resdat.class;keep name;run;data b;set a nobs=nobs;ran=ceil(nobs*ranuni(2007);run;proc s

11、ort data=b;by ran;data c;set b;if ran=lag(ran) then delete; /*与上一题的区别在于,删除序号相同的观测*/run;data d;set c;if _n_<=5;run;7. 计算数据集A中变量X的累乘。data a (drop=i);do i=1 to 10;x=10*ranuni(0);output;end;run;data b; set a; retain y 1; y=y*x; run; 8. 如何改变一个SAS数据集的变量顺序?data a;/*可用用stk000001数据集*/set Resdat.stk000001;

12、run;Data b; retain date code; set a; run;Data b; format date yymmdd10. Stkcd $6.; run;9. 数据集A和B包含同样两变量DATE和PRICE,以DATE为标识变量合并数据集A和B为C。合并时应该注意什么?【使用redat中的stk00001,stk00002,同样两变量日期date,收盘价clpr,以date为标识合并数据集,使用by语句,注意重命名stkcd, clpr】data a;/*可用stk000001数据集*/set Resdat.stk000001;keep stkcd date clpr;run

13、;data b;/*可用stk000002数据集*/set Resdat.stk000002;keep stkcd date clpr;rename stkcd=stkcd2 clpr=clpr2;run;data c;merge a b;by date;run;10. 给下段程序的主要语句加注释。STOP语句能否删除?为什么? data a;do obsnum=1 to last by 20; /*从观测1到所有观测,间隔20执行do语句*/set ResDat.stk000001 point=obsnum nobs=last;/*观测序号变量为obsnum,所有观测变量为last*/out

14、put;/*输出到数据a*/end;/*结束do组*/stop;/*结束data步*/run;【删除stop语句会使SAS系统陷入死循环】11. 假设数据集A中的变量logdate为如下形式的字符格式:1998-12-2 1999-8-6 1999-8-10 将其转换为日期格式变量date。data a;input logdate $9.;cards;1998-12-21999-8-6 1999-8-10;run;data b(keep=date);set a;date=input(logdate,yymmdd10.);informat date yymmdd10.;format date y

15、ymmdd10.;run;12. 运行SAS程序过程中,SAS系统创建的自动变量是否包含在创建的数据集?一般情况下,怎样查看系统自动变量的值?【不包括,将自动变量赋值给定义的变量,或者使用put _all_语句】data a;retain x 0;do i=1 to 10;output;end;run;data b; set a; n=_n_; run;13. SAS系统显示表达式、函数、数据集、数组或矩阵的具体值时,常需要哪些语句和过程?【Put语句,set语句,proc print过程】data a;x=date();/*今天的日期*/y='_'put x= y=;form

16、at x yymmdd10.;run;data b;set resdat.class;keep name;put name;run;proc print data=resdat.class (obs=5);var name sex;run;观测值为12345,LOG窗口输出为n=614. 写出下面各段程序创建数据集的所有观测值,并指出PUT语句分别在LOG窗口输出什么结果? data a1;do n=1 to 5;output;end;put n=;run;观测值同上,LOG窗口输出为:n=1n=2一直到n=6data a1;do n=1 to 5;output;put n=;end;put

17、n=;run;LOG窗口输出同第二问,观测值只有一个6data a1;do n=1 to 5;put n=;end;put n=;run;/*无output语句*/LOG窗口和观测值都只有6data a1;do n=1 to 5;end;put n=;run;观测值是从2到5,LOG输出一个5data a2;n=1;do until(n>=5); /*等于5就不run了,所以n等于4之后就停止*/n+1;output;end;put n=;run;同上data a3;n=1;do while(n<5);n+1;output;end;put n=;run;窗口和观测值都只有8;即un

18、til语句是无论如何都要执行一次的data a4;n=7;do until(n>=5);n+1;output;end;put n=;run;LOG输出为7,观测值缺失。即while语句第一次是先判断再第一次执行的data a5;n=7;do while(n<5);n+1;output;end;put n=;run;15. 数据集A有一个变量n,5个观测值1,2,3,4,5。数据A1由下面程序2产生,同样有一个变量n,5个观测值1,2,3,4,5。试分析下面两段程序中,PUT语句在Log窗口输出结果的差异,为什么?程序1:LOG窗口显示n从1到5Data a;Set a;Put n=

19、;Run;LOG窗口显示n=6程序2:data a1;do n=1 to 5;output;end;put n=;run;16. 试由以下的9种德国马克对美元汇率看跌期权和9种英镑对美元汇率的看跌期权产生81种组合。 一年期,DM/USD汇率的9种不同看跌期权的执行价格和成本执行价格Kdm成本 Cdm0.660.0858550.650.0321910.640.0207950.630.0170010.620.0137110.610.0108510.600.0083880.590.0062910.550.001401一年期,BP/USD汇率的9种不同看跌期权的执行价格和成本执行价格 Kbp成本 C

20、bp1.300.1372131.250.0826451.200.0450601.150.0283481.100.0161461.050.0078601.000.0032770.950.0011340.900.000245答案:data dm;input Kdm Cdm;cards;0.660.0858550.650.0321910.640.0207950.630.0170010.620.0137110.610.0108510.600.0083880.590.0062910.550.001401;run;data bp;input Kbp Cbp;cards;1.300.1372131.250.

21、0826451.200.0450601.150.0283481.100.0161461.050.0078601.000.0032770.950.0011340.900.000245;run;data dm;set dm;dm_no=_n_;run;/*对dm的种类标号*/data bp;set bp;bp_no=_n_;run;/*对bp的种类标号*/%macro names(name,number);%do i=1 %to &number;&name%end;%mend names; /*下面set要用到一段重复的文本*/data a;set %names(dm,9);by

22、dm_no;run; /*连接9个相同的数据集dm,然后对其按照标号排序*/data b;set %names(bp,9);run; /*连接9个相同的数据集bp,序列为1-9循环9次*/data c;merge a b; /*合并a和b,这样产生81个不重复的组合,每一个a中的标号(如1)都对应了b中的9个标号*/run;方法2:data test16;do i=1 to 9;set dm point=i; /*依次读入数据集dm中的第1至9个观测*/do j=1 to 9 ;set bp point=j;/*在读入dm的第i个观测后,依次读入bp中的所有观测*/output;end;end

23、;stop;run;17. 不用SAS函数,用宏%a(n,p)计算二项分布的概率分布和累计概率(k=1,2,n)。方法1:%macro a(n,p);data a;do k=0 to &n;fn=fact(&n);fk=fact(k);fnk=fact(&n-k);d=&p*k*(1-&p)*(&n-k);f=fn/(fk*fnk);binomial=f*d;output;end;data a;set a;cum+binomial;proc gplot data=a;symbol1 v=star i=needle c=red;plot binom

24、ial*k=1;run;quit;%mend a;%a(20,0.2);方法2:%macro a(n,p);data a1;retain fn 1;do i=1 to &n;fn=fn*i;end;do k=0 to &n;fk=1;fnk=1; /*一定要使第二重循环开始时这两个变量的值为1,这里不能为retain语句*/do i=1 to k;fk=fk*i;end; /*输出的只有最后的fk,如果在这里加上了output则会输出中间值*/do i=1 to &n-k;fnk=fnk*i;end;d=&p*k*(1-&p)*(&n-k);f=

25、fn/(fk*fnk);binomial=f*d;output;end;run;data a1;set a1;cum+binomial;run;proc gplot data=a;symbol1 v=star i=needle c=red;plot binomial*k=1;run;quit;%mend a;%a(20,0.2);18. 创建组标识变量GROUP,将数据集A中的观测等分为10组,观测值不能整除10时,前余数组各多加一个观测值。data a;set resdat.treat nobs=nobs;x=(nobs-mod(nobs,10)/10;call symput('no

26、bs',nobs); /*宏变量传递观测值个数*/call symput('groupn',x);/*宏变量传递商*/call symput('mod',mod(nobs,10);/*宏变量传递余数*/drop x;run;%put &nobs &groupn;data b;do i=1 to &mod ;do _n_=1 to &groupn+1; /*前余数组各多加一个观测值*/group=i;output;end;end;do i=&mod+1 to 10;do _n_=1 to &groupn; /

27、*后面各组观测值数为商数*/group=i;output;end;end;drop i;run;data c;merge a b; /*合并后即可对数据集a的观测值分组*/proc sort data=c;by group;run;方法二(更好);data a;set resdat.treat;retain groupid 0; /*规定变量groupid的初始值为0,同时规定该变量的值在下一次使用时不被清空*/groupid=groupid+1; if groupid=11 then groupid=1;/*相当于分十组,第10*n+m个变量被重新分到第m组*/run;19. 现有一个数据流

28、:a 2 b 3 c d 4 6,按下面要求创建SAS数据集。用语句input id $ no; 变量id取值上面数据流里的a,b,c,d,变量no取值2,3,4,6。但是这个数据流存在问题:如有的id没有no,有的no没有id。创建SAS数据集,删除只有id没有no或者只有no没有id的观测,即把上面的c和6去掉,最后得到三个观测,a 2, b 3与d 4。data a;input t$;cards;a 2 b 3 c d 4 6;data b;set a;id=lag(t);no=t;if 'a'<=id<='z' and '0'

29、<=no<='9'drop t;run;20. 现有一个数据流:a23 223 bc4 36 3c5 11d 400 620,按下面要求创建SAS数据集。用语句input id $ no; 变量id取值上面数据流里的a23, bc4, 11d ,变量no取值233,36,400。但是这个数据流存在问题:如有的id没有no,有的no没有id。创建SAS数据集,删除只有id没有no或者只有no没有id的观测,即把上面的3c5和620去掉,最后得到三个观测:a23 223bc4 3611d 400data b;input t $ ;cards;a23 223 bc4 36

30、 3c5 11d 400 620;data c;set b;file 'e:mac.txt'put t $;run;data a ;infile 'e:mac.txt'input id $ / no;idtest=id+1;if no='.' or idtest ne '.' then lostcard;run;方法二:data a(keep=id no);input x $ ;id=lag1(x);no=input(x,8.);/*把变量x转换成数值,若遇非纯数字的值,则转成缺失值,同时日志窗口NOTE会提示转换无效,不必在意。

31、如果数据很多,可以用系统选项把note去掉:options nonotes*/y=lag1(no);if y='.' and id=' ' and no='.'/*选择观测,如果y是缺失值,但id和no不是缺失值,就是我们想要的观测*/cards;a23 223 bc4 36 3c5 11d 400 620;run;21. 用SAS软件作三维Hat图,x和y轴取值区间为-5,5,z = sin(sqrt(y*y + x*x)。data a; do x=-5 to 5 by 0.1; do y=-5 to 5 by 0.1; z=sin(sqrt(

32、x*2+y*2); output; end; end;run;proc g3d data=a;plot y*x=z;run;22. 创建马鞍图形,其数学公式为,p和q的值不同会导致图形的变化,生成p=20,q=1的马鞍图形。提示:产生x, y和z的数据后,用下面的过程实现作图。proc g3d;plot y*x=z;run;data a; do x=-20 to 20 by 0.1; do y=-20 to 20 by 0.1; z=-x*x/20+y*y; output; end; end;run;proc g3d data=a;plot y*x=z;run;23. 数据集Calendar只

33、有日期变量,test包含股票代码、日期与收盘价三个变量。合并两个数据集,用Calendar中的日期数据替代test数据集中每只股票的日期数据。创建样本数据集:data calendar;input Date yymmdd10.;format Date yymmdd10.;cards;2003-1-202003-1-212003-1-222003-1-232003-1-242003-1-272003-1-282003-1-292003-1-302003-1-312003-2-32003-2-42003-2-52003-2-62003-2-72003-2-8;run;data test; infi

34、le datalines missover ;informat Stkcd $6. Date yymmdd10. Clpr 8.2;input Stkcd $ Date Clpr;format Stkcd $6. Date yymmdd10. Clpr 8.2;cards;600000 2003-1-20 9.94600000 2003-1-22 9.66600000 2003-1-24 9.88600000 2003-1-27 10.07600000 2003-1-28 10.17600000 2003-1-29 10.31600000 2003-2-4 10.31600000 2003-2

35、-5 10.13600001 2003-1-20 8.13600001 2003-1-21 8.14600001 2003-1-22 8.17600001 2003-1-23 8.40600001 2003-1-24 8.65600001 2003-1-31 8.93600001 2003-2-4 9.02600001 2003-2-5 8.63600002 2003-1-31 2.25600002 2003-2-3 2.26600002 2003-2-4 2.35600002 2003-2-6 2.556000022003-2-82.12;run;proc sort data=test;by

36、 stkcd date;proc sort data=calendar;by date;run; /*先排序*/data b(drop=date);set calendar end=end;by date;if _n_=1 then call symput('start',date);if end then call symput('end',date);run; /*将起始日和终止日的值赋给宏变量*/data stkcd(keep=stkcd);set test;if stkcd=lag1(stkcd) then delete;run;/*找到包含的股票的代码

37、*/data stkcd;set stkcd nobs=nobs;call symput('n_stk',nobs);run; /*查找包含的股票的数量*/data stkcd_r;format date yymmdd10.;informat date yymmdd10.;set stkcd;do date=&start to &end;output;end;proc sort data=stkcd_r;by date;run; /*使每一只股票的在每一天都有观测值*/%macro names(name,n);%do i=1 %to &n;&na

38、me%end;%mend names;data c;set %names(calendar,&n_stk);i=1;run; /*新数据集包含了相同数量的观测*/proc sort data=c;by date;run;data d;merge c stkcd_r;by date;if i=. then delete;drop i; /*二者合并后去掉calendar中没有的日期值*/proc sort data=d;by stkcd date;run;data final;retain stkcd date clpr;merge d test; /*按照股票代码和日期合并,解决缺失值

39、的问题*/by stkcd date;run;方法二:data stkcd;set stkcd nobs=nobs;call symput('n_stk',nobs);run;data calendar;set calendar nobs=nobs;call symput('n_date',nobs);run;data stkdate;do i=1 to &n_stk ;set stkcd point=i ;do j=1 to &n_date;set calendar point=j;output;end;end;stop;run;data fi

40、nal;retain stkcd date clpr;merge stkdate test; /*按照股票代码和日期合并,解决缺失值的问题*/by stkcd date;run;24. 当股票的分配事件分两次完成,且第一次分配在节假日或该股票的停牌日,第二次分配在下一个交易日时,一般的数据库会有如下表所示的观测值存贮方式。写程序将停牌日(即没有收盘价的那个观测值)中的分配事件合到下一个观测中。股票代码日期收盘价送股比例转增比例配股比例配股价增发比例增发价格现金红利.xxxxxxxxxxxx.0.20.100000xxxxxxxxxxxx000.55.20 000.50 xxxxxxxxxxxx

41、.xxxxxxxxxxxx.注:表示有数据值,.表示缺失值。编程变量名参考:股票代码Hstkcd,日期Dt,收盘价Closepr,送股比例Stkdrate,转增比例Capissurate,配股比例Rigoffrate,配股价Rigoffpr,增发比例Snirate,增发价格Snipr,现金红利Dividend。data test;input hstkcd Dt mmddyy8. Closepr Stkdrate Capissurate Rigoffrate Rigoffpr Snirate Snipr Dividend;format Dt mmddyy8.;cards;600001 01-01

42、-01 8 . . . . . . . 600001 01-01-02 . 0.3 0.3 0 0 0 0 0 600001 01-01-03 9 0 0 0.5 0.2 0 0 0.1600002 01-01-02 10 0 0 0 0 0 0 0600002 01-01-03 . 0.2 0.3 0.5 0 0 0.1 0.2600002 01-01-04 12 0 0 0 0.2 0.3 0.5 0.6;run;proc sort data=test;/*排序原数据集*/by hstkcd dt;run;data p17 (keep=hstkcd Dt Closepr Stkdrate

43、Capissurate Rigoffrate Rigoffpr Snirate Snipr Dividend);/*只保留原数据集中的变量*/set test;array origin0:7 closepr Stkdrate Capissurate Rigoffrate Rigoffpr Snirate Snipr Dividend;/*为处理方便,创建数组*/array lagn0:7 lag0-lag7;/*创建另一个数组*/lagcd=lag1(hstkcd);/*为防止分配数据不全的情况,下面有检查是否同一股票的条件*/do i=0 to 7;lagn(i)=lag1(origin(i

44、);/*后滞,用来下面判断*/end;if lagcd=hstkcd and lag0='.' then do i=1 to 7;/*必须满足是同一股票,且收盘价为缺失值*/origin(i)=origin(i)+lagn(i);/*分配数据加和*/end;if closepr='.'/*删除收盘价是缺失值的观测*/run;25假设股票市场的股本数据如下表,对每支股票(至少1000支股票),按如下要求设计填充总股本和流通股股本数据的SAS程序:以该股票前面的股本数据填充后面的缺失值,如果某支股票上市交易时就缺失股本数据,则用该股票上市后的第一个股本数据向前填充。

45、股票代码日期收盘价股本变动日总股本流通股.000001xxxxxx .缺失缺失000001xxxxxx2000-10-101000000500000.000001xxxxxx2003-11-111200000600000000001xxxxxx.0000022001-09-0832000001500000000002.注:表示有数据值,.表示缺失值。编程变量名参考:股票代码Stkcd日期Date收盘价Clpr股本变动日CapchgDate总股本Fullshr流通股trdshr/* 创建样本数据集 */data test; infile datalines missover ;informat

46、Stkcd $6. Date yymmdd10. Clpr 8.2 capchgDate yymmdd10. fullshr Trdshr 20. ;input Stkcd $ Date Clpr capchgDate fullshr Trdshr;format Stkcd $6. Date yymmdd10. Clpr 8.2 capchgDate yymmdd10. fullshr Trdshr 20.;cards;6000002003-1-209.942003-1-2039150000009000000006000002003-1-219.686000002003-1-229.66600

47、0002003-1-239.66000002003-1-249.886000002003-1-2710.076000002003-1-2810.176000002003-1-2910.316000002003-2-1010.096000002003-2-1110.26000002003-2-1210.316000002003-2-1310.136000012000-5-298.132000-5-296000012000-5-308.146000012000-5-318.656000012000-6-18.936000012000-6-29.116000012000-6-59.022000-6-

48、514865531004900000006000012000-6-68.636000012000-6-78.526000012000-6-88.556000012000-6-98.36000012000-6-128.34;Run;proc sort data=a;by stkcd descending capchgdate; /*先对数据集进行排序*/run;data b;set a;by stkcd descending capchgdate; /*capchgdate按照降序排列,为下面的lag函数做好准备*/x=lag1(fullshr);y=lag1(trdshr);/*在有if-th

49、en限制的条件下,lag函数的的结果是满足if条件的上一个之后观测值的值,所以这里先不用if条件*/if first.stkcd=0 and capchgdate=. and fullshr=. then do;/*需要判断的条件:不是同一只股票的第一个观测值(从而保证是相同的股票),要有股权变动日,同时数据缺失*/fullshr=x;trdshr=y;end;drop x y;proc sort data=b;by stkcd date;run;data b;retain stkcd date clpr capchgdate fullshr trdshr; /*保持原有变量的顺序,同时ret

50、ain对fullshr和trdshr的缺失值处理*/set b(rename=(fullshr=fshr trdshr=tshr);if capchgdate=. then do;fullshr=fshr;trdshr=tshr;end;drop fshr tshr;run;解法二:data test25;set test25;n=_n_; /*取出观测号*/run;proc sort data=test25;by stkcd n; /*先按stkcd后按n排序*/run;data test25;set test25;by stkcd n; /*按先stkcd后n的顺序读入观测*/retain

51、 tempf; /*规定变量tempf 若没有新值读入,就不清空原值,保持从上一观测得到的值*/if first.stkcd=1 then tempf=.; /*若是该stkcd的第一个变量,则tempf值为空*/if fullshr=. then tempf=fullshr;/*若该观测不为空,则tempf值为fullshr值*/else fullshr=tempf;/*若该观测的fullshr值为空,则fullshr的值通过前一个值向后填充*/drop tempf;run;/*上一段程序保证了向后填充,且若第一个观测值为空,则之后的观测为空直到某个观测不为空*/proc sort data=test25;by stkcd descending n; /*通过stkcd和倒序的n排列*/run;data test25;set test25;by stkcd descending n;retain tempf;if first.stkcd=1 then tempf=.;if fullshr=. then tempf=fullshr;else fullshr=tempf;drop tempf;run;/*本段程序遇上一段原理相同,保证了若第一个观测股本为空,则由最近的观测向前

温馨提示

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

评论

0/150

提交评论