SS综合练习题答案.docx

上传人:b****6 文档编号:13594280 上传时间:2023-06-15 格式:DOCX 页数:72 大小:40.41KB
下载 相关 举报
SS综合练习题答案.docx_第1页
第1页 / 共72页
SS综合练习题答案.docx_第2页
第2页 / 共72页
SS综合练习题答案.docx_第3页
第3页 / 共72页
SS综合练习题答案.docx_第4页
第4页 / 共72页
SS综合练习题答案.docx_第5页
第5页 / 共72页
SS综合练习题答案.docx_第6页
第6页 / 共72页
SS综合练习题答案.docx_第7页
第7页 / 共72页
SS综合练习题答案.docx_第8页
第8页 / 共72页
SS综合练习题答案.docx_第9页
第9页 / 共72页
SS综合练习题答案.docx_第10页
第10页 / 共72页
SS综合练习题答案.docx_第11页
第11页 / 共72页
SS综合练习题答案.docx_第12页
第12页 / 共72页
SS综合练习题答案.docx_第13页
第13页 / 共72页
SS综合练习题答案.docx_第14页
第14页 / 共72页
SS综合练习题答案.docx_第15页
第15页 / 共72页
SS综合练习题答案.docx_第16页
第16页 / 共72页
SS综合练习题答案.docx_第17页
第17页 / 共72页
SS综合练习题答案.docx_第18页
第18页 / 共72页
SS综合练习题答案.docx_第19页
第19页 / 共72页
SS综合练习题答案.docx_第20页
第20页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SS综合练习题答案.docx

《SS综合练习题答案.docx》由会员分享,可在线阅读,更多相关《SS综合练习题答案.docx(72页珍藏版)》请在冰点文库上搜索。

SS综合练习题答案.docx

SS综合练习题答案

SAS金融数据处理综合练习题

1.创建一包含10000个变量(X1-X10000),100个观测值的SAS数据集。

分别用DATA步,DATA步数组语句和IML过程实现。

(1)用data步实现

datatest1a;

informatx1-x100009.2;/*创建100个变量,规定输出格*/

doi=1to100;/*做循环*/

output;/*每一次循环,输出所有的变量,包括i*/

dropi;/*去掉i*/

end;

run;

或者

datatest1a;

formatx1-x10000best12.;/*创建10000个变量x1-x10000,但未有初始化*/

doi=1to100;/*创建100个观测*/

output;/*且每一个观测都输出到数据集test1a*/

end;

dropi;

run;

(2)用data步数组语句实现

datatest1b;

arrayt{10000}x1-x10000;/*创建数组变量*/

doi=1to100;/*每个变量有100个观测*/

output;/*每一次循环,输出所有的变量,包括i*/

dropi;/*去掉i*/

end;/*循环结束*/

datatest1c;

arrayt{10000}x1-x10000;

doj=1to100;/*100次观测的循环*/

doi=1to10000;

t{i}=i;/*第i个变量等于i*/

end;

output;/*输出第i次观测的i个变量的值*/

end;

dropij;/*去掉i和j*/

run;

或者

datatest1b;

arrayt{10000}x1-x10000;

doj=1to100;/*100次观测的循环*/

doi=1to10000;

t{i}=i;/*第i个变量等于i*/

end;

output;/*输出第i次观测的i个变量的值*/

end;

dropij;/*去掉i和j*/

run;

(3)用IML过程实现

prociml;/*启用iml环境*/

x='x1':

'x10000';/*定义数组x1-x10000*/

t=j(100,10000,1);/*创建100行10000列的.同元素矩阵*/

printtx;/*打印两个矩阵察看*/

createtest1dfromt[colname=x];/*创建数据集c,变量数为列数,观测数为行数,列名更改为变量名,默认逻辑库为临时*/

appendfromt;/*将t中的值填充的数据集中*/

showdatasets;

showcontents;/*显示数据集的一些7788的属性*/

closetest1d;

run;

quit;

或者

prociml;

x='x1':

'x10000';

t=shape(1,100,10000);/*shape和j不太一样,顺序是元素,行,列,j的顺序为行,列,元素*/

printtx;

createtest1dfromt[colname=x];

appendfromt;

showdatasets;

showcontents;

closetest1d;

run;

quit;

(4)用宏实现

%macronames(name,number,obs);

dataa;

%doi=1%to&obs;

%don=1%to&number;

&name&n=1;

%end;

output;

%end;

run;

%mendnames;

%names(x,10000,100);

2.多种方法创建包含变量X的10000个观测值的SAS数据集。

3.数据集A中日期变量DATE包含有缺失值,创建包含日期变量DATE的数据集B,并填充开始到结束日之间的所有日期值。

prociml;/*启用iml环境*/

x={'date'price};/*注意所用的括号类型*/

t={11112,23412,21323,12345,123456,34566,67534,23457,21349};

printt;/*构造9行2列的向量*/

t[1,1]=.;

t[2,1]=.;

t[5,1]=.;

t[9,1]=.;/*令某些date的观测成为缺失值,包括第一个观测值*/

createafromt[colname=x];/*从矩阵构造数据集a,为变量命名date和price*/

appendfromt;/*填充矩阵已有的观测值*/

showdatasets;

showcontents;/*显示一些信息,可省略*/

closea;

run;

quit;/*退出iml环境*/

dataa;

seta;

formatdateyymmdd8.2;/*将数值型的改变为日期型的输出变量*/

run;

dataa1;

seta;

n=_n_;/*取出观测号,以方便进行排序*/

formatdateyymmdd8.2;

retaintemp;/*设定一个变量temp,规定如果没有新的观测读入,不清空原值,保留原来的观测值*/

ifdate^=.thentemp=date;/*如果读入的date的观测值不为空*/

elsedate=temp;

run;/*至此数据集填充了后面的部分,最之前的缺失值未能填充,后面将数据集逆序排列进行填充*/

dataa2;

n=_n_;/*创建数据集c,取出c的观测号,以方便进行逆向排序*/

seta1;

run;

procsortdata=a2;

bydescendingn;/*将c逆向排序*/

run;

dataa3;/*定义数据集d,填充数据集d的末尾的观测*/

seta2;

dropntemp;

run;

dataa4;

seta3;

retaintemp;

ifdate^=.thentemp=date;

elsedate=temp;

run;

dataa4;

n=_n_;

seta4;

run;

procsortdata=a4out=b(drop=ntemp);

bydescendingn;/*定义数据集e,将d中的观测最一次逆序,得到原序*/

run;

以下是助教的做法但是无法运行成功

procsortdata=a;

bydate;

datab(drop=date);

setaend=end;

bydate;

retainstart;

if_n_=1thenstart=date;

if_n_=endthendo;

last=date;

output;

end;

run;

datab(keep=date);

informatdateyymmdd10.;

formatdateyymmdd10.;

setb;

dodate=starttolast;

output;

end;

run;

4.创建包含日期变量DATE的SAS数据集,日期值从1900年1月1日到2000年1月1日。

datatest4a;

informatdate9.2xy;

formatdateyymmdd10.2;/*规定输出格式*/

x=mdy('1','1','1900');/*返回sas日期值,即以1960/1/1为0的日期值*/

y=mdy('1','1','2000');

doi=xtoy;

date=i;

output;

end;

dropixy;

run;

或者

datatest4b;

dodate='1jan1900'dto'1jan2000'd;

output;

end;

formatdateyymmdd10.;

run;

5.利用随机数函数RANUNI对某数据集设计返回抽样方案。

datasample(drop=samplesizen);

samplesize=5;/*样本容量为5*/

don=1tosamplesize;/*从1到样本容量的循环*/

readit=ceil(ranuni(0)*totobs);

putreadit=;

setresdat.classpoint=readitnobs=totobs;

output;

end;

stop;

run;

或者

datadat1;

setresdat.class;

keepname;

run;

%macrosample(i);

datadat2;

setdat1nobs=nobs;

ran=ceil(nobs*ranuni(&i));

run;

procsortdata=dat2;

byran;

run;

%mendsample(i);

%sample

(2);

datadat3;

setdat2;

if_n_<=6;

run;

%sample(3);

datadat4;

setdat2;

if_n_<=6;

run;

%sample(5);

datadat5;

setdat2;

if_n_<=6;

%sample(30);

datadat6;

setdat2;

if_n_<=6;

run;

dataa;

setdat3dat4dat5dat6;

run;

或者

dataa;

setresdat.class;

keepname;

run;

datab;

setanobs=nobs;

ran=ceil(nobs*ranuni(2007));

run;

procsortdata=b;

byran;

datac;

setb;

if_n_<=5;

run;

6.利用随机数函数RANUNI对某数据集设计不返回抽样方案。

dataa;

setresdat.class;

keepname;

run;

datab;

setanobs=nobs;

ran=ceil(nobs*ranuni

(1));

putran=;

run;

procsortdata=b;

byran;

datac;

setb;

if_n_<=15;

run;

或者

dataa;

setresdat.class;

keepname;

run;

datab;

setanobs=nobs;

ran=ceil(nobs*ranuni(2007));

run;

procsortdata=b;

byran;

datac;

setb;

ifran=lag(ran)thendelete;

run;

datad;

setc;

if_n_<=15;

run;

7.计算数据集A中变量X的累乘。

prociml;

x='x';

m=do(1,10,0.5);

t=t(m);

printmt;

createafromt[colname=x];

appendfromt;

quit;/*用IML生成数据集a*/

datab;

seta;

retainy1;

y=y*x;

run;

或者

dataa;

inputx;

y=y*x;

retainy1;

cards;

1

2

3

4

;

run;

8.如何改变一个SAS数据集的变量顺序?

dataa(keep=name)b(keep=age)c(keep=weight)d(keep=height);

setresdat.class;

run;

datatest8a;

mergebdca;

run;

或者

datatest8b;

formatheightweightagename;

setresdat.class;

run;

9.数据集A和B包含同样两变量DATE和PRICE,以DATE为标识变量合并数据集A和B为C。

合并时应该注意什么?

在合并前必须先排序,并且mergeab;bydate;与mergeba;bydate;结果不一样。

procsortdata=a;

bydate;

run;

procsortdata=b;

bydate;

run;

datac;

mergeab;

bydate;

run;

10.给下段程序的主要语句加注释。

STOP语句能否删除?

为什么?

dataa;/*创建数据集a*/

doobsnum=1tolastby20;/*做循环,从第一个观测到最后一个观测数,间隔20*/

setResDat.stk000001point=obsnumnobs=last;/*指针选项和观测总数选项*/

output;/*强制输出当前值,否则只会在最后输出现值*/

end;/*命令选换结束*/

stop;/*强制结束数据步,因为set语句在数据步程序中会反复执行数据步的程序直到遇到文件结束(最后一跳观测)的标志,这里使用了指针选项可能碰不到这种标志,所以要用stop,否则就有可能无休止地执行下去*/

run;

11.假设数据集A中的变量logdate为如下形式的字符格式:

1998-12-2

1999-8-6

1999-8-10

将其转换为日期格式变量date。

如果字符格式的数据为:

19981202

19990806

19990810

又怎样转换为日期格式变量。

dataa;

inputlogdate$10.;

cards;

1998-12-2

1999-8-6

1999-8-10

;

run;

datab;

seta(rename=(logdate=date));

date=input(date,yymmdd10.);

labeldate='日期';

run;

或者

dataa;

inputlogdate$9.;

cards;

1998-12-2

1999-8-6

1999-8-10

;

run;

datab;

formatdateyymmdd10.;/*规定输出格式*/

seta;

date=input(logdate,yymmdd10.);/*转变格式*/

droplogdate;

run;

12.运行SAS程序过程中,SAS系统创建的自动变量是否包含在创建的数据集?

一般情况下,怎样查看系统自动变量的值?

自动变量是由数据步语句自动创建的,这些自动变量不输出到数据集中,在重复过程中被保留。

dataa;

setresdat.class;

put_n__error_;

keep_numeric_;

run;

13.SAS系统显示表达式、函数、数据集、数组或矩阵的具体值时,常需要哪些语句和过程?

put;procprint;print;show;list;

14.写出下面各段程序创建数据集的所有观测值,并指出PUT语句分别在LOG窗口输出什么结果?

dataa1;

n=6

don=1to5;

output;

end;

putn=;

run;

数据集a1中有一个变量n,5个观测值为1-5,日志窗口输出n=6;

dataa1;

don=1to5;

n=1n=2n=3n=4n=5n=6

output;

putn=;

end;

putn=;

run;

数据集中有一个变量n,5个观测为1-5,日志窗口输出n=1-n=6

dataa1;

n=1n=2n=3n=4n=5n=6

don=1to5;

putn=;

end;

putn=;

run;

数据集中有一个变量n,只有一个观测值6,日志窗口输出n=1-n=6

dataa1;

n=6

don=1to5;

end;

putn=;

run;

数据集中有一个变量n,只有一个观测值6,日志窗口输出n=6

dataa2;

n=1;

n=5

dountil(n>=5);

n+1;

output;

end;

putn=;

run;

数据集中有一个变量,4个观测,n=2-n=5,日志窗口输出n=5

dataa3;

n=1;

n=5

dowhile(n<5);

n+1;

output;

end;

putn=;

run;

同上一题一样的情况,数据集中有一个变量,4个观测,n=2-n=5,日志窗口输出n=5

dataa4;

n=7;

n=8

dountil(n>=5);

n+1;

output;

end;

putn=;

run;

数据集中有一个观测,n=8,日志窗口n=8。

因为执行了一次数据步

dataa5;

n=7;

n=7

dowhile(n<5);

n+1;

output;

end;

putn=;

run;

数据集中一个变量n,没有观测,日志窗口n=7

15.数据集A有一个变量n,5个观测值1,2,3,4,5。

数据A1由下面程序2产生,同样有一个变量n,5个观测值1,2,3,4,5。

试分析下面两段程序中,PUT语句在Log窗口输出结果的差异,为什么?

程序1:

Dataa;

Seta;

Putn=;

Run;

在日志窗口中输出n=1-n=5

程序2:

dataa1;

don=1to5;

output;

end;

putn=;

run;

在日志窗口中输出n=6

理解了set语句就不难得到这个结果。

dataa;

don=1to5;

output;

end;

run;

Dataa;

Seta;

Putn=;

Run;

dataa1;

don=1to5;

output;

end;

putn=;

run;

16.试由以下的9种德国马克对美元汇率看跌期权和9种英镑对美元汇率的看跌期权产生81种组合。

一年期,DM/USD汇率的9种不同看跌期权的执行价格和成本

执行价格Kdm

成本Cdm

0.66

0.085855

0.65

0.032191

0.64

0.020795

0.63

0.017001

0.62

0.013711

0.61

0.010851

0.60

0.008388

0.59

0.006291

0.55

0.001401

一年期,BP/USD汇率的9种不同看跌期权的执行价格和成本

执行价格Kbp

成本Cbp

1.30

0.137213

1.25

0.082645

1.20

0.045060

1.15

0.028348

1.10

0.016146

1.05

0.007860

1.00

0.003277

0.95

0.001134

0.90

0.000245

创建样本数据集:

datadm;

inputKdmCdm;

cards;

0.660.085855

0.650.032191

0.640.020795

0.630.017001

0.620.013711

0.610.010851

0.600.008388

0.590.006291

0.550.001401

;

run;

databp;

inputKbpCbp;

cards;

1.300.137213

1.250.082645

1.200.045060

1.150.028348

1.100.016146

1.050.007860

1.000.003277

0.950.001134

0.900.000245

;

run;

解答:

datatest16a;

setdm;/*依次读入数据集dm中的第1至9个观测*/

doj=1to9;

setbppoint=j;/*在读入dm的第i个观测后,依次读入bp中的所有观测*/

output;

end;

run;

或者

datatest16b;

doi=1to9;

setdmpoint=i;/*依次读入数据集dm中的第1至9个观测*/

doj=1to9;

setbppoint=j;/*在读入dm的第i个观测后,依次读入bp中的所有观测*/

output;

end;

end;

stop;

run;

17.不用SAS函数,用宏%a(n,p)计算二项分布的概率分布和累计概率(k=1,2……,n)。

(此处留有空白)

 

18.创建组标识变量GROUP,将数据集A中的观测等分为10组,观测值不能整除10时,前余数组各多加一个观测值。

dataa;

n=_n_;

retaingroupid0;

settestnobs=totobs;/*选项nobs观测的总数,赋值给totobs*/

x=mod(totobs,10);/*观测个数除以10的余数*/

y=int(totobs/10);/*观测个数除以10的整数*/

run;

dataa;

setanobs=totobs;

if(n>0andn=<(y+1)*x)then

groupid=int((n-1)/(y+1))+1;/*前x组的号码*/

else

groupid=int((n-x-1)/y)+1;/*不多元素的组号*/

dropxy;

run;

19.现有一个数据流:

a2b3cd46,按下面要求创建SAS数据集。

用语句inputid$no;变量id取值上面数据流里的a,b,c,d,变量no取值2,3,4,6。

但是这个数据流存在问题:

如有的id没有no,有的no没有id。

创建SAS数据集,删除只有id没有no或者只有no没有id的观测,即把上面的c和6去掉,最后得到三个观测,a2,b3与d4。

datab;

inputno$@@;

id=lag(no);

cards;

a2b3cd46

;

run;

datad;

formatid$8.no$8.;

setb;

if'a'<=no<='z'or'1'<=id<='9'thenlostcard;

run;

或者

dataa;

inputt$@@;/*指针*/

cards;

a2b3cd46

;

dataa;

seta;retain;

if'a'<=lowcase(t)<='z'thenid=t;/*如果是字符串,则用专门的函数判断*/

elsedo;

no=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2