文章目录(Table of Contents)
前言
这是《统计软件教程》(李东风版)第三章的题目解答。
3.1
题目要求
3.1.1
通过使用label来加上中文的列标题,使用noobs label不产生观测序号。
- Title "SASuser.business数据集";
- data SAS3_1;
- set SASuser.business;
- run;
- proc print data=SAS3_1 noobs label;/*noobs label 使得在output里不产生序号*/
- var company nation industry employs sales profits;
- label company="公司" nation="国家" industry="部门" employs="员工数" sales="销售额" profits="利润";
- run;
可以看到数据集的内容有一个公司的名字,所在国家,所在在的部门(行业),员工数,销售额和利润。
3.1.2
首先使用sort进行排序后,再按国家和部门进行分类,并求出一个国家的一个部门的销售额的总和。
- Title "SASuser.business数据集";
- proc sort data = SAS3_1; /*按照国家 行业 销售排序*/
- by nation industry sales;
- run;
- proc print data = SAS3_1 label noobs; /*不显示行标*/
- var company sales profits; /*分析变量有 company sales profits*/
- by nation industry;
- sum sales;
- run;
3.1.3
使用table画出交叉表,并使用label和keylabel来改变标签,使其变为中文标签。
- proc tabulate data=SAS3_1;
- class nation industry; /*国家和部门的交叉表*/
- var sales; /*表格中数据为销售额*/
- table nation all,(industry all)*sales*sum;
- keylabel sum="总和";
- label nation="国家" industry="行业" sales="销售额";
- run;
从图中,可以看出美国的销售额,在每个行业,都要远远高于其他的国家,能看出美国在每个行业都较为发达。
3.2
题目要求
由于第二章习题6中需要用到宏,故习题2-6没有做,故此题也不能做。
3.3
题目要求
3.3.1
如下图,我们可以看到math sat score的变量名为satm
接着使用univariate函数对satm进行分析即可。
- data SAS_3_2;
- set SASuser.gpa;
- run;
- proc univariate data=SAS_3_2;
- var satm;
- run;
从上面的结果我们可以看出satm的均值是595,标准差是86。
3.3.2
我们可以使用freq来求性别的分布。
- data SAS_3_2;
- set SASuser.gpa;
- run;
- proc freq data=SAS_3_2;
- tables sex; /*统计性别的分布*/
- run;
从上面的结果中我们可以看出,男性的人数要小于女性。
3.3.3
使用corr来计算相关系数。
- data SAS_3_2;
- set SASuser.gpa;
- run;
- proc corr data=SAS_3_2;
- var hss hsm hse; /*统计HSS HEM HSE的相关系数*/
- run;
从相关系数的结果中我们可以看出hss
, hsm
, hse
的相关度系数较大,他们之间有较强的相关性。
3.3.4
我们可以使用gchart配合var来画出直方图。
- data SAS_3_2;
- set SASuser.gpa;
- run;
- proc gchart data=SAS_3_2;
- vbar satm; /*画出satm的直方图*/
- run;
从直方图中我们可以看出satm的数值基本集中在595,在均值附加,很低和很高的人数都较少。
3.3.5
使用gplot和plot来画出散点图,并且我们可以通过symbol i=rlcli95 v=star来定一一些画图的特点,如i=rlcli95表示画出带95%预测的回归曲线, v=star表示散点使用星来表示。
- data SAS_3_2;
- set SASuser.gpa;
- run;
- proc gplot data=SAS_3_2;
- symbol i=rlcli95 v=star;/*i是控制画图的一些特点(如是否将散点图连接,是否画出回归线) v是控制散点的形状*/
- plot satv*satm;
- run;
从图中我们可以看出satm和satv呈现正相关性,与之前所求的正相关系数也符合。
3.4
题目要求
3.4.1
使用univariat配合var oxygen对OXYGEN进行分析。
- data SAS_3_4;
- set SASuser.fitness;
- run;
- proc univariate data=SAS_3_4;
- var oxygen;
- run;
可以看到oxygen的均值是47,标准差是5.3。
3.4.2
我们首先使用sort对group进行排序,再使用means来计算group的简单统计量。
- /* 这是一个创建数据集的过程,如果你之前运行过,可以不加这句话
- data SAS_3_4;
- set SASuser.fitness;
- run;
- */
- proc sort data=SAS_3_4;
- by group; /*先对group进行排序*/
- run;
- proc means data=SAS_3_4;
- by group;
- run;
从图中可以看出年龄大的心跳会低一些,随着年龄的增长,心肺功能会有所下降。
3.4.3
我们使用corr来计算相关系数,使用var可以指定要计算相关系数的变量有哪些。
- /* 这是一个创建数据集的过程,如果你之前运行过,可以不加这句话
- data SAS_3_4;
- set SASuser.fitness;
- run;
- */
- proc corr data=SAS_3_4;
- var age weight runtime rstpulse runpulse maxpulse oxygen group; /*统计HSS HEM HSE的相关系数*/
- run;
从相关系数我们可以看出,心跳与年龄有很强的相关性。跑步的时候的心率和最大心率有很强的正相关,这个也很好理解,因为跑步的时候心跳会加快。
3.5
题目要求
需要用到宏,故不需要做。
3.6
题目要求
思路:我们首先生成的点F分布自由度为(1,30) .. ... (10,30)的点,x为从-5取到10,每隔0.1取一个点。接着使用plot函数画出散点图,并将散点图使用曲线连接,使用overlay来将六条曲线画在一张图上,使用legend来添加图例。
- data SAS_3_6;
- do x= -5 to 10 by 0.1;
- f_1_30=PDF('F',x,1,30);
- f_2_30=PDF('F',x,2,30);
- f_3_30=PDF('F',x,3,30);
- f_4_30=PDF('F',x,4,30);
- f_5_30=PDF('F',x,5,30);
- f_10_30=PDF('F',x,10,30);
- output;
- end;
- run;
- run;
- proc gplot data=SAS_3_6;
- Title "F分布密度曲线";
- symbol1 color=red i=join v=none line=1;
- symbol2 color=blue i=join v=none line=2;
- symbol3 color=yellow i=join v=none line=3;
- symbol4 color=black i=join v=none line=4;
- symbol5 color=green i=join v=none line=5;
- symbol6 color=grey i=join v=none line=6;
- plot f_1_30*x=1 f_2_30*x=2 f_3_30*x=3 f_4_30*x=4 f_5_30*x=5 f_10_30*x=6 / overlay legend hminor=0 vaxis=axis1;/*添加图例*/
- run;
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论