SAS数据集的操作.docx
《SAS数据集的操作.docx》由会员分享,可在线阅读,更多相关《SAS数据集的操作.docx(15页珍藏版)》请在冰豆网上搜索。
SAS数据集的操作
第一次作业
学号:
6姓名:
何斌年级专业:
10级统计1班指导老师:
肖莉
1.以下数据是调查15个学生是否学过四门课程(记为A、B、C、D)的资料,0表示没有学过,1表示已学过。
0001m1100f
0010m0001f
0110f1100m
1011m0000m
0110f1111f
1001f0011m
1011m1011f
1010f
(1)对这组资料创建一SAS数据集,然后按男女分别生成两个SAS数据集。
(2)建立一新变量NEW:
先把是否学过4门课程的资料看成4个元素的向量,并作为一个4位二进制数,然后转换为十进制数作为NEW的值。
比如:
(1011)可化为1*23+0*22+1*21+1*20=11。
然后创建一个包含新变量和四门课得分的SAS数据集;并按NEW值从小到大的次序排列后输出。
(3)请统计一下15个学生中学过A、B、C、D四门课的各有多少人,并把结果存为SAS数据集后并打印输出。
解答如下:
(1)
SAS程序如下所示:
optionsnodatenonumber;
dataa1;
inputABCDsex$@@;
cards;
0001m1100f
0010m0001f
0110f1100m
1011m0000m
0110f1111f
1001f0011m
1011m1011f
1010f
;
run;
datamanwomen;
seta1;
select(sex);
when('m')outputman;
when('f')outputwomen;
end;
run;
procprintdata=a1;
title'------总数据集------';
run;
procprintdata=man;
title'------男生数据------';
run;
procprintdata=women;
title'------女生数据------';
run;
得到结果如下:
图1
图2
图3
(2)
SAS程序如下所示:
dataa2;
seta1;
dropsex;
new=A*(2**3)+B*(2**2)+C*(2**1)+D;
run;
procsortdata=a2;
bynew;
run;
procprintdata=a2;
title'------加入了new变量------';
run;
得到结果如下所示:
图4
(3)
SAS程序如下所示:
dataa3;
seta1;
dropsex;
run;
procprintdata=a3noobs;
title'------各科目总学习人数------';
sumABCD;
run;
得到结果如下所示
图5
2.试用概率函数计算正态分布N(3,9)的分布函数F(X)。
X
F(X)
0.00
0.10
…
3.00
解答如下:
由于该正态分布的均值为3,标准差为3,故SAS编程如下:
datab1;
dox=0to3by0.1;
fx=probnorm((x-3)/3);
output;
end;
run;
procprintdata=b1;
title1'-------------------------------------------';
title2'用概率函数计算正态分布N(3,9)的分布函数F(X)';
run;
或者:
datab1;
Fx=0;
dox=0to3by0.1;
fx=probnorm((x-3)/3);
Fx=Fx+fx;
output;
end;
run;
procprintdata=b1;run;
得到结果如下所示:
图6
3.试用分位数函数计算F分布的分位数。
ndfddf
0.050.0250.005
1
1
…
1
2
…
2
…
5
1
2
…
10
1
…
10
…
10
(
满足
)
解答如下:
SAS程序如下所示:
datac1;
dogailv=0.05,0.025,0.005;
dondf=1to5by1;
doddf=1to10by1;
fenweishu=finv(gailv,ndf,ddf);
output;
end;
end;
end;
run;
procprintdata=c1;
title1'------------------------------';
title2'用分位数函数计算F分布的分位数';
run;
得到结果如下所示:
…………
图7
4.以下四行数据是四次记录下来的数据,每次从4个厂家(用A,B,C,D代表)生产的同类食品中,每个厂家抽取三包测量每包的数量。
每一行开头三个数值是厂家A生产,以后依次是B、C、D生产的。
727469616165626570857661
675262605559646564677260
576672724343636672567592
575678606358617968738671
(1)请按数据形式输入后生成外部数据文件DB25.TXT.
(2)用DATA步调入外部文件DB25.TXT(用INFILE和INPUT语句)生成包括变量:
TIME(次数),N(包的序号),FACTORY(厂家)和NUMBER(数量)的SAS数据集
(3)请按以下要求输出
(2)产生的SAS数据集:
1.只包含变量TIME,FACTORY和NUMBER;
2.对每个厂家的资料分别输出报告,要求每包食品的数量按小到大的次序排好.
(4)计算每个厂家的12包食品的平均数量,标准差,极差和总和等描述统计量;然后存贮为一个SAS数据集(包含4个观测)。
解答如下:
(1)
SAS程序如下所示:
dataDB25;
dom=1to4;
dofactory='A','B','C','D';
don=1to3;
inputaccounts@@;
output;
end;
end;
end;
cards;
727469616165626570857661
675262605559646564677260
576672724343636672567592
575678606358617968738671
;
run;
procprintdata=DB25;
title1'------------------------';
title2'各厂的检测数据';
run;
PROCEXPORTDATA=WORK.DB25
OUTFILE="C:
\DocumentsandSettings\Administrator\桌面\DB25.txt"
DBMS=TABREPLACE;
PUTNAMES=YES;
RUN;
得到结果如下所示:
………
图8
(2)
SAS程序如下所示:
dataDB_3;
setDB25;
file'D:
\DB25.txt';
putmfactory$naccounts;
run;
dataDB_4;
infile'D:
\DB25.txt';
inputmfactory$naccounts;
run;
procprintlabel;
label
m='time';
label
accounts='number';
run;
得到结果如下所示:
………
图10
(3)
1.SAS程序如下所示:
datad3;
setDB_3;
dropn;
run;
procprintdata=d3noobs;
title'------------------';
run;
得到结果如下所示:
图11
2.SAS程序如下所示:
datad3_2;
setd3;
keepfactorynumber;
run;
procsortdata=d3_2;
byfactorynumber;
run;
procprintdata=d3_2noobs;
title1'---------------------------------------------------------';
title2'对每个厂家的资料分别输出报告,每包食品的数量按小到大的次序排好';
run;
得到结果如下所示:
………
图12
(4)
SAS程序如下所示:
datad4;
procmeansdata=d3_2meanstdrangesum;
classfactory;
run;
procprint;
title1'---------------------------------------------------------';
title2'计算每个厂家的12包食品的平均数量,标准差,极差和总和等描述统计量';
run;
得到结果如下所示:
图12
5、书上第28页,1.4题
(1)原数据集如下所示:
X
1
2
3
4
5
6
Pk
1/6
1/6
1/6
1/6
1/6
1/6
由E(X)=
计算得:
E(X)=0.583
由Var(X)=
计算得:
Var(X)=0.208
众数m0=1/6,中位数me=1/6
(2)原数据集如下所示:
X
1
2
3
4
5
6
Pk
1/6
1/12
1/12
1/6
3/12
3/12
由E(X)=
计算得:
E(X)=0.6667
由Var(X)=
计算得:
Var(X)=0.2139
众数m0=1/12,中位数me=1/6