ImageVerifierCode 换一换
格式:DOC , 页数:44 ,大小:517KB ,
资源ID:8660955      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-8660955.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SAS综合练习题的(答案).doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

SAS综合练习题的(答案).doc

1、Comment C1: 习题课例题Answers第 1 页 共 44 页SAS金融数据处理综合练习题1. 创建一包含 10000个变量(X1-X10000) ,100 个观测值的 SAS数据集。分别用 DATA步,DATA 步数组语句和 IML过程实现。(1)用data步实现data test1a;informat x1-x10000 9.2; /*创建100个变量,规定输出格*/do i=1 to 100; /*做循环*/output;/*每一次循环,输出所有的变量,包括i*/drop i;/*去掉i*/end;run;或者data test1a;format x1-x10000 best1

2、2.; /*创建10000个变量x1-x10000,但未有初始化*/do i=1 to 100; /*创建100个观测*/output;/*且每一个观测都输出到数据集test1a*/end;drop i;run;(2)用data步数组语句实现data test1b;array t10000 x1-x10000 ;/*创建数组变量*/do i =1 to 100;/*每个变量有100个观测*/output;/*每一次循环,输出所有的变量,包括i*/drop i;/*去掉i*/end;/*循环结束*/data test1c;array t10000 x1-x10000;do j=1 to 100;

3、/*100次观测的循环*/do i = 1 to 10000;ti=i;/*第i个变量等于i*/end;output;/*输出第i次观测的 i个变量的值*/end;drop i j;/*去掉i和j*/run;或者data test1b;array t10000 x1-x10000;do j=1 to 100;/*100次观测的循环*/do i = 1 to 10000;Answers第 2 页 共 44 页ti=i;/*第i个变量等于i*/end;output;/*输出第i次观测的 i个变量的值*/end;drop i j;/*去掉i和j*/run;(3)用IML过程实现proc iml;/*

4、启用iml环境*/x=x1:x10000;/*定义数组x1-x10000*/t= j(100,10000,1) ;/*创建100行10000列的. 同元素矩阵*/print t x;/*打印两个矩阵察看*/create test1d from tcolname=x;/*创建数据集c,变量数为列数 ,观测数为行数,列名更改为变量名,默认逻辑库为临时*/append from t; /*将t中的值填充的数据集中*/show datasets;show contents;/*显示数据集的一些 7788的属性*/close test1d;run;quit;或者proc iml;x=x1:x10000;

5、t= shape(1,100,10000) ;/*shape和j不太一样,顺序是元素,行,列,j的顺序为行,列,元素*/print t x;create test1d from tcolname=x;append from t; show datasets;show contents;close test1d;run;quit;(4)用宏实现%macro names(name,number,obs);data a;%do i=1 %to %do n=1 %to %end;output;%end;run;%mend names;%names(x, 10000,100);Comment C2: 期

6、中考试题Answers第 3 页 共 44 页2. 多种方法创建包含变量 X的 10000个观测值的 SAS数据集。3. 数据集 A中日期变量 DATE包含有缺失值,创建包含日期变量 DATE的数据集 B,并填充开始到结束日之间的所有日期值。proc iml;/*启用iml环境*/x= date price;/*注意所用的括号类型 */t= 1111 2,2341 2,2132 3,1234 5,12345 6,3456 6,6753 4,2345 7,2134 9;print t;/*构造 9行2列的向量*/t1,1=.;t2,1=.;t5,1=.;t9,1=.;/*令某些date的观测成为

7、缺失值,包括第一个观测值*/create a from tcolname=x;/*从矩阵构造数据集a,为变量命名date和price */append from t; /*填充矩阵已有的观测值 */show datasets;show contents;/*显示一些信息,可省略 */ close a;run;quit;/*退出iml环境 */data a;set a;format date yymmdd8.2;/*将数值型的改变为日期型的输出变量*/run;data a1;set a ;n=_n_;/*取出观测号,以方便进行排序 */format date yymmdd8.2;retain t

8、emp;/*设定一个变量temp,规定如果没有新的观测读入,不清空原值,保留原来的观测值 */if date=. then temp=date;/*如果读入的date的观测值不为空 */else date=temp;run;/*至此数据集填充了后面的部分,最之前的缺失值未能填充,后面将数据集逆序排列进行填充*/data a2;n=_n_;/*创建数据集 c,取出c 的观测号,以方便进行逆向排序*/set a1;run;proc sort data=a2;by descending n;/*将c逆向排序*/run;data a3;/*定义数据集 d,填充数据集d 的末尾的观测*/Comment

9、C3: 习题课例题Answers第 4 页 共 44 页set a2 ;drop n temp;run;data a4 ;set a3;retain temp;if date=. then temp=date;else date=temp;run;data a4;n=_n_;set a4;run;proc sort data=a4 out=b(drop=n temp);by descending n;/*定义数据集e ,将d中的观测最一次逆序,得到原序 */run;以下是助教的做法但是无法运行成功proc sort data=a;by date;data b(drop=date);set a

10、end=end;by date;retain start;if _n_=1 then start=date;if _n_=end then do;last=date;output;end;run;data b(keep=date);informat date yymmdd10.;format date yymmdd10.;set b;do date=start to last;output;end;run;4. 创建包含日期变量 DATE的 SAS数据集,日期值从 1900年 1月 1日到 2000年 1月 1日。data test4a;informat date 9.2 x y;format

11、 date yymmdd10.2;/*规定输出格式*/x=mdy(1,1,1900);/*返回sas 日期值,即以1960/1/1为0的日期值*/y=mdy(1,1,2000);Comment C4: 习题课例题Answers第 5 页 共 44 页do i= x to y;date=i;output;end;drop i x y;run;或者data test4b;do date=1jan1900d to 1jan2000d;output;end;format date yymmdd10.;run;5. 利用随机数函数 RANUNI对某数据集设计返回抽样方案。data sample(drop

12、 =samplesize n);samplesize=5; /*样本容量为 5*/do n=1 to samplesize; /*从1 到样本容量的循环*/readit=ceil(ranuni(0)*totobs);put readit=;set resdat.class point=readit nobs=totobs;output;end;stop;run;或者data dat1;set resdat.class;keep name;run;%macro sample(i);data dat2;set dat1 nobs=nobs;ran=ceil(nobs*ranuni(run;proc

13、 sort data=dat2;by ran;run;%mend sample(i);%sample(2);data dat3;set dat2;if _n_=5);n+1;output;end;put n=;run;数据集中有一个变量,4 个观测,n=2-n=5,日志窗口输出 n=5data a3;n=1;n=6n=1 n=2 n=3 n=4 n=5 n=6n=5n=6n=1 n=2 n=3 n=4 n=5 n=6Answers第 11 页 共 44 页do while(n=5);n+1;output;end;put n=;run;数据集中有一个观测,n=8,日志窗口 n=8。因为执行了一次

14、数据步data a5;n=7;do while(n0 and n=9 then do;isno=0;return; /*结束循环,返回数据步开始 */end;end;data c;Answers第 17 页 共 44 页set b;char=lag(t);lag_isno=lag(isno);number=t;if lag_isno=0 and isno=1 then output;keep char number;run;或者/*基本思路是先将原数据读入,然后重新按输出为一列,使用lostcard语句读取数据, 思路更简洁*/*读入数据,重新输出为一列*/data _null_;input

15、t $ ;file D:a.txt;put t $;cards;a23 223 bc4 36 3c5 11d 400 620;run;/*利用lostcard语句来选出正确的数据,其中no=. 说明将有非数字的字符的值读入数值变量,也就是连续的name的情况,舍去当前行,重新定位;如果idtest 不为.说明读入的id是数值型的,就是连续id情况,舍去当前行,重新定位。这样就可以读出正确的数据了*/data a (drop=idtest);infile D:a.txt;input id $ / no;idtest=id+1;if no=. or idtest ne . then lostcar

16、d;run;或者/*方法一,基本思路:先将数据流都读入到一个字数变量中,判断如果其有字符出现,则赋值给name ,否则转化为数值后赋值给id当name和id值同时不为空时认为找到了一线数据,输出(对name ,id 都使用retain语句,输出后将前一步读入的数据清空).*/data a;informat temp $10.;attrib name informat=$10. format=$10. label=“Name“;attrib id informat=best12. format=best12. lable=“Id“;retain name “;retain id .;/*先将数据

17、流都读入到变量temp中*/input temp :$10.;/*设计一个变量标记temp中的是否有字母,有值为1,否则为0,先设为零*/flg=0;/*检验 temp是否有字母*/do i=65 to 90;if index(upcase(temp),byte(i)=0 then do;/*如果发现一个字母,将Answers第 18 页 共 44 页flg变量值改为1,退出循环*/flg=1;leave;end;end;/*根据以上的判断,如果temp中有字母,将其赋值给name,如果name不为空,转换为数值型赋值给id,否则舍去*/if flg=1 then do;name=temp;e

18、nd;else if name=“ then id=input(temp,best12.);/*如果name和id同时不为空时说明找到了一组配对的数据,输出到数据集中,清空原有的值*/if name=“ and id=. then do;output;name=“;id=.;end;keep name id;cards;a23 223 bc4 36 3c5 11d 400 620;run;或者/*在上述的方法中,对于连续出现的name自动用后一个覆盖前一个林而保留正确的数据,对于连续出现的数字, 通过判断是否有name与之配对而决定是否保留,从而选取出想要的数据.*/*上述方法可以进行两处修改

19、和完善,一:上面的程序只是判断了字符串中是否有字母,如果有字母才认为是name但是如果字符串中有字母以外的非数字字符就会出错,比如将bc4 36 3c5 改为 bc4 3?5。此时如果将检验标准改为判断读入的字符串中是否有非数字以外的字符会更好,将:do i=65 to 90;if index(upcase(temp),byte(i)=0 then do;改为:do i=1 to length(temp);if substr(temp,i,1)9 then do;二:对于连续数字情况的去除也可以不在本步中进行,输出后name也不清空,即读入一个数据,如果是有非数字字符的就赋值给name,否则给

20、id,如果name,id同时不为空则输出,输出后id清空,name不清空,再继续读入。对于连续的数字,就会用其前面最近出现 name形成多条观测,最后再通过排序只保留每个name对应的第一个观测也可以,这种对应的程序如下:*/data a;informat temp $10.;attrib name informat=$10. format=$10. label=“Name“;attrib id informat=best12. format=best12. lable=“Id“;Answers第 19 页 共 44 页retain name “;/*先将数据流都读入到变量temp中*/inp

21、ut temp :$10.;/*设计一个变量标记temp中的是否有字母,有值为1,否则为0,先设为零*/flg=0;/*检验 temp是否有字母*/do i=65 to 90;if index(upcase(temp),byte(i)=0 then do;/*如果发现一个字母,将flg变量值改为1,退出循环*/flg=1;leave;end;end;/*根据以上的判断,如果temp中有字母,将其赋值给name,如果name不为空,转换为数值型赋值给id*/if flg=1 then do;name=temp;end;else id=input(temp,best12.);/*如果name 和i

22、d 同时不为空时说明找到了一组配对的数据,输出到数据集中,清空原有的值*/if name=“ and id=. then do;output;id=.;end;keep name id;cards;a23 223 bc4 36 3c5 11d 400 620;run;proc sort;by name;data a;set a;by name;if first.name;run;或者data a(keep=id no);input x $ ;id=lag1(x);no=input(x,8.);/*把变量x转换成数值,若遇非纯数字的值,则转成缺失值,同时日志窗口NOTE 会提示转换无效,不必在意

23、。如果数据很多,可以用系统选项把note去掉:options nonotes*/y=lag1(no);if y=. and id= and no=.;/*选择观测,如果y是缺失值,但id 和no不是缺失值,就是我们想要的观测*/Comment C13: 习题课例题Answers第 20 页 共 44 页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.5; do y=-5 to 5 by 0.5

24、;z = sin(sqrt(y*y + x*x);output;end;end;run;proc g3d; plot y*x=z;title hat graph;run;22. 创建马鞍图形,其数学公式为 ,p 和 q的值不同会导致图形的变化,生yxz2成 p=20,q=1 的马鞍图形。提示:产生x, y和z的数据后,用下面的过程实现作图。proc g3d;plot y*x=z;run;data a;p=20;q=1;do x=-9 to 9 by 0.1; /*从-9到9 每距离0.1取一个点*/do y=-3 to 3 by 0.1;z=-x*2/p+y*2/q; /*创建马鞍图的数学公式

25、*/output;end;end;drop p q;run;proc g3d; /*用g3d作图*/plot y*x=z;run;23. 数据集 Calendar只有日期变量, test包含股票代码、日期与收盘价三个变量。合并两个数据集,用 Calendar中的日期数据替代 test数据集中每只股票的日期数据。创建样本数据集:data calendar;input Date yymmdd10.;Answers第 21 页 共 44 页format Date yymmdd10.;cards;2003-1-202003-1-212003-1-222003-1-232003-1-242003-1-2

26、72003-1-282003-1-292003-1-302003-1-312003-2-32003-2-42003-2-52003-2-62003-2-72003-2-8;run;data test; infile 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

27、 9.88600000 2003-1-27 10.07600000 2003-1-28 10.17600000 2003-1-29 10.31600000 2003-2-4 10.31600000 2003-2-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.25

28、Comment C14: 期中考试题Answers第 22 页 共 44 页600002 2003-2-3 2.26600002 2003-2-4 2.35600002 2003-2-6 2.55600002 2003-2-82.12;run;proc sort data=calendar;by date;run;proc sort data=test;by date;run;data a;merge test calendar;by date;run;24. 当股票的分配事件分两次完成,且第一次分配在节假日或该股票的停牌日,第二次分配在下一个交易日时,一般的数据库会有如下表所示的观测值存贮方

29、式。写程序将停牌日(即没有收盘价的那个观测值)中的分配事件合到下一个观测中。股票代码 日期收盘价送股比例转增比例配股比例 配股价增发比例 增发价格现金红利 . . . . . . .xxxxxx xxxxxx . 0.2 0.1 0 0 0 0 0 xxxxxx xxxxxx 0 0 0.5 5.20 0 0 0.50 xxxxxx xxxxxx . . . . . . . xxxxxx xxxxxx . . . . . . . . . . . . . . . . . . . . .注:表示有数据值,.表示缺失值。编程变量名参考:股票代码 Stkcd日期 Date收盘价 Clpr送股比例 St

30、kdrate转增比例 Capissurate配股比例 Rigoffrate配股价 Rigoffpr增发比例 Snirate增发价格 Snipr现金红利 Dividend创建样本数据集:Answers第 23 页 共 44 页data a;input Stkcd Date yymmdd8. Clpr Stkdrate Capissurate Rigoffrate Rigoffpr Snirate Snipr Dividend;format Date mmddyy8.;cards;600001 01-01-01 8 . . . . . . . 600001 01-01-02 . 0.3 0.3 0

31、 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;第一种做法中变量名成为旧名称,可改为题中设定的相应名称。data test;input hstkcd Dt yymmdd8. Closepr Stkdrate Capissurate Rigoffrate Rigoffpr Snirate Snipr Dividend;f

32、ormat Dt mmddyy8.;cards;600001 01-01-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 p

33、17 (keep=Hstkcd Dt Closepr Stkdrate 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);/*为防止分配数据不全的情况,下面有检查是否同一股票的条

34、件*/do i=0 to 7;lagn(i)=lag1(origin(i);/*后滞,用来下面判断*/end;if lagcd=hstkcd and lag0=. then do i=1 to 7;/*必须满足是同一股票,且收盘价为缺失值*/origin(i)=origin(i)+lagn(i);/*分配数据加和*/Answers第 24 页 共 44 页end;if closepr=.;/*删除收盘价是缺失值的观测*/run;或者data a;input Stkcd Date yymmdd8. Clpr Stkdrate Capissurate Rigoffrate Rigoffpr Sni

35、rate Snipr Dividend;format Date mmddyy8.;cards;600001 01-01-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;data b;set a;temp_1=lag(clpr);

36、temp_2=lag(stkdrate);temp_3=lag(Capissurate);temp_4=lag(Rigoffrate);temp_5=lag(Rigoffpr);temp_6=lag(Snirate);temp_7=lag(Snipr);temp_8=lag(Dividend);if _n_=1 then temp_1=1;run;data c;set b;array temp_i(7) temp_2 temp_3 temp_4 temp_5 temp_6 temp_7 temp_8;array variables(7) Stkdrate Capissurate Rigoffr

37、ate Rigoffpr Snirate Snipr Dividend;if temp_1=. then do;do i=1 to 7;variables(i)=variables(i)+temp_i(i);end;end;else if clpr=. then do;do i= 1 to 7;variables(i)=.;end;end;Answers第 25 页 共 44 页drop temp_1-temp_8 i;run;data d;set c;if clpr=. then delete;run;25假设股票市场的股本数据如下表,对每支股票(至少 1000 支股票) ,按如下要求设计填

38、充总股本和流通股股本数据的 SAS 程序:以该股票前面的股本数据填充后面的缺失值,如果某支股票上市交易时就缺失股本数据,则用该股票上市后的第一个股本数据向前填充。股票代码 日期 收盘价 股本变动日 总股本 流通股 . .000001 xxxxxx . 缺失 缺失000001 xxxxxx 20000-10-10 1000000 500000 . .000001 xxxxxx 2003-11-11 1200000 600000000001 xxxxxx . .000002 2001-09-08 3200000 1500000000002 .注:表示有数据值,.表示缺失值。编程变量名参考:股票代码

39、 Stkcd日期 Date收盘价 Clpr股本变动日 CapchgDate总股本 Fullshr流通股 trdshr/* 创建样本数据集 */data test; infile datalines missover ;informat 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 yymmd

40、d10. fullshr Trdshr 20.;cards;600000 2003-1-20 9.94 2003-1-20 3915000000 900000000600000 2003-1-21 9.68600000 2003-1-22 9.66600000 2003-1-23 9.6600000 2003-1-24 9.88600000 2003-1-27 10.07600000 2003-1-28 10.17Answers第 26 页 共 44 页600000 2003-1-29 10.31600000 2003-2-10 10.09600000 2003-2-11 10.2600000

41、 2003-2-12 10.31600000 2003-2-13 10.13600001 2000-5-29 8.13 2000-5-29600001 2000-5-30 8.14600001 2000-5-31 8.65600001 2000-6-1 8.93600001 2000-6-2 9.11600001 2000-6-5 9.02 2000-6-5 1486553100 490000000600001 2000-6-6 8.63600001 2000-6-7 8.52600001 2000-6-8 8.55600001 2000-6-9 8.3600001 2000-6-12 8.3

42、4;Run;data test25a;infile datalines missover;informat 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;600000 2003-1-20 9.94 2003-1-20 39

43、15000000900000000600000 2003-1-21 9.68600000 2003-1-22 9.66600000 2003-1-23 9.6600000 2003-1-24 9.88600000 2003-1-27 10.07600000 2003-2-12 10.31600000 2003-2-13 10.13600001 2000-5-29 8.13 2000-5-29600001 2000-5-30 8.14600001 2000-5-31 8.65600000 2003-1-28 10.17600000 2003-1-29 10.31600000 2003-2-10

44、10.09600000 2003-2-11 10.2600001 2000-6-1 8.93600001 2000-6-2 9.11600001 2000-6-5 9.02 2000-6-5 1486553100490000000Answers第 27 页 共 44 页600001 2000-6-6 8.63600001 2000-6-7 8.52600001 2000-6-8 8.55600001 2000-6-9 8.3600001 2000-6-12 8.34;Run;data test25b;set test25a;n=_n_;run;proc sort data=test25b;by

45、 stkcd n;run;data test25c;set test25b;by stkcd n;retain tempf;if first.stkcd=1 then tempf=.;if fullshr=. then tempf=fullshr;else fullshr=tempf;drop tempf;run;proc sort data=test25c;by stkcd descending n;run;data test25d;set test25c;by stkcd descending n;retain tempf;if first.stkcd=1 then tempf=.;if

46、fullshr=. then tempf=fullshr;else fullshr=tempf;drop tempf;run;proc sort data=test25d;by stkcd n;data test25e;set test25d;by stkcd n;retain tempt;if first.stkcd=1 then tempt=.;if trdshr=. then tempt=trdshr;Answers第 28 页 共 44 页else trdshr=tempt;drop tempt;run;proc sort data=test25e;by stkcd descendin

47、g n;run;data test25f;set test25e;by stkcd descending n;retain tempt;if first.stkcd=1 then tempt=.;if trdshr=. then tempt=trdshr;else trdshr=tempt;drop tempt;run;proc sort data=test25f;by stkcd n;run;data test25;set test25f(drop=n);run;26用线性插值法填充缺失数据。以下面的实际数据为基础,完成相关 SAS 程序的设计。银行间债券市场的回购行情如下表,对于一个月、二

48、个月和三个月的回购利率,按如下要求设计填充回购利率的月底缺失数据。从所给数据集中识别出一个月、二个月和三个月的回购利率,建立一个仅包括日期Date(2004 年 1 月到 2004 年 5 月) 、一个月债券回购利率 R1M、二个月债券回购利率R2M 和三个月债券回购利率 R3M 的数据集,对于不同期限的回购利率分别取每个月最后一天的回购利率,如果在月底当日没有交易,则采用该月最后一次交易与下月第一次交易的数据进行直线插值,作为当月最后一天相应期限的债券回购利率。日期 基准利率代码 基准利率 2004-01-30 R2M 2004-02-02 R2M 2004-02-27 R2M 2004-0

49、2-27 R3M 2004-03-01 R1M 2004-03-01 R2M 注:表示有数据值,.表示缺失值。编程变量名参考:Answers第 29 页 共 44 页交易日期 Date基准利率代码 Code基准利率 Ir一个月债券回购利率 R1M二个月债券回购利率 R2M三个月债券回购利率 R3M/* 创建样本数据集 */data test; informat Date yymmdd10. code$8. Ir;input Date: Code $ Ir;format Date yymmdd10. code $8. Ir;cards;2004-01-02 R1M 0.0252004-01-05 R1M 0.02552004-01-05 R2M 0.024

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报