SAS教程[3]–第三章解答|《统计软件教程》(李东风版)|文艺数学君

  • A+
所属分类:SAS基础
摘要在这个新的教程中,我会结合《统计软件教程》(李东风版)这本数给出教程,并给出这本书第1到第5章的课后习题答案。希望大家能有所收获。这是《统计软件教程》(李东风版)这本书的第三章的内容。

前言

这是《统计软件教程》(李东风版)第三章的题目解答。

3.1

题目要求

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

3.1.1

通过使用label来加上中文的列标题,使用noobs label不产生观测序号。

  1. Title "SASuser.business数据集";
  2. data SAS3_1;
  3. set SASuser.business;
  4. run;
  5. proc print data=SAS3_1 noobs label;/*noobs label 使得在output里不产生序号*/
  6. var company nation industry employs sales profits;
  7. label company="公司" nation="国家" industry="部门" employs="员工数" sales="销售额" profits="利润";
  8. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

可以看到数据集的内容有一个公司的名字,所在国家,所在在的部门(行业),员工数,销售额和利润。

3.1.2

首先使用sort进行排序后,再按国家和部门进行分类,并求出一个国家的一个部门的销售额的总和。

  1. Title "SASuser.business数据集";
  2. proc  sort data = SAS3_1;  /*按照国家 行业 销售排序*/
  3. by nation industry sales;
  4. run;
  5. proc print data = SAS3_1 label noobs;  /*不显示行标*/
  6. var company sales profits;   /*分析变量有 company sales profits*/
  7. by nation industry;
  8. sum sales;
  9. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

3.1.3

使用table画出交叉表,并使用labelkeylabel来改变标签,使其变为中文标签。

  1. proc tabulate data=SAS3_1;
  2. class nation industry; /*国家和部门的交叉表*/
  3. var sales;             /*表格中数据为销售额*/
  4. table nation all,(industry all)*sales*sum;
  5. keylabel sum="总和";
  6. label nation="国家" industry="行业" sales="销售额";
  7. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从图中,可以看出美国的销售额,在每个行业,都要远远高于其他的国家,能看出美国在每个行业都较为发达。

3.2

题目要求

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

由于第二章习题6中需要用到宏,故习题2-6没有做,故此题也不能做。

3.3

题目要求

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

3.3.1

如下图,我们可以看到math sat score的变量名为satm

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

接着使用univariate函数对satm进行分析即可。

  1. data SAS_3_2;
  2. set SASuser.gpa;
  3. run;
  4. proc univariate data=SAS_3_2;
  5. var satm;
  6. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从上面的结果我们可以看出satm的均值是595,标准差是86。

3.3.2

我们可以使用freq来求性别的分布。

  1. data SAS_3_2;
  2. set SASuser.gpa;
  3. run;
  4. proc freq data=SAS_3_2;
  5. tables sex; /*统计性别的分布*/
  6. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从上面的结果中我们可以看出,男性的人数要小于女性。

3.3.3

使用corr来计算相关系数。

  1. data SAS_3_2;
  2. set SASuser.gpa;
  3. run;
  4. proc corr data=SAS_3_2;
  5. var hss hsm hse; /*统计HSS HEM HSE的相关系数*/
  6. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从相关系数的结果中我们可以看出hss , hsm , hse的相关度系数较大,他们之间有较强的相关性。

3.3.4

我们可以使用gchart配合var来画出直方图。

  1. data SAS_3_2;
  2. set SASuser.gpa;
  3. run;
  4. proc gchart data=SAS_3_2;
  5. vbar satm; /*画出satm的直方图*/
  6. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从直方图中我们可以看出satm的数值基本集中在595,在均值附加,很低和很高的人数都较少。

3.3.5

使用gplot和plot来画出散点图,并且我们可以通过symbol i=rlcli95 v=star来定一一些画图的特点,如i=rlcli95表示画出带95%预测的回归曲线, v=star表示散点使用星来表示。

  1. data SAS_3_2;
  2. set SASuser.gpa;
  3. run;
  4. proc gplot data=SAS_3_2;
  5. symbol i=rlcli95 v=star;/*i是控制画图的一些特点(如是否将散点图连接,是否画出回归线) v是控制散点的形状*/
  6. plot satv*satm;
  7. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从图中我们可以看出satmsatv呈现正相关性,与之前所求的正相关系数也符合。

3.4

题目要求

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

3.4.1

使用univariat配合var oxygen对OXYGEN进行分析。

  1. data SAS_3_4;
  2. set SASuser.fitness;
  3. run;
  4. proc univariate data=SAS_3_4;
  5. var oxygen;
  6. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

可以看到oxygen的均值是47,标准差是5.3。

3.4.2

我们首先使用sort对group进行排序,再使用means来计算group的简单统计量。

  1. /* 这是一个创建数据集的过程,如果你之前运行过,可以不加这句话
  2. data SAS_3_4;
  3. set SASuser.fitness;
  4. run;
  5. */
  6. proc sort data=SAS_3_4;
  7. by group; /*先对group进行排序*/
  8. run;
  9. proc means data=SAS_3_4;
  10. by group;
  11. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从图中可以看出年龄大的心跳会低一些,随着年龄的增长,心肺功能会有所下降。

3.4.3

我们使用corr来计算相关系数,使用var可以指定要计算相关系数的变量有哪些。

  1. /* 这是一个创建数据集的过程,如果你之前运行过,可以不加这句话
  2. data SAS_3_4;
  3. set SASuser.fitness;
  4. run;
  5. */
  6. proc corr data=SAS_3_4;
  7. var age weight runtime rstpulse runpulse maxpulse oxygen group; /*统计HSS HEM HSE的相关系数*/
  8. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

从相关系数我们可以看出,心跳与年龄有很强的相关性。跑步的时候的心率和最大心率有很强的正相关,这个也很好理解,因为跑步的时候心跳会加快。

 

3.5

题目要求

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

需要用到宏,故不需要做。

 

3.6

题目要求

SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君

思路:我们首先生成的点F分布自由度为(1,30) .. ... (10,30)的点,x为从-5取到10,每隔0.1取一个点。接着使用plot函数画出散点图,并将散点图使用曲线连接,使用overlay来将六条曲线画在一张图上,使用legend来添加图例。

  1. data SAS_3_6;
  2. do x= -5 to 10 by 0.1;
  3. f_1_30=PDF('F',x,1,30);
  4. f_2_30=PDF('F',x,2,30);
  5. f_3_30=PDF('F',x,3,30);
  6. f_4_30=PDF('F',x,4,30);
  7. f_5_30=PDF('F',x,5,30);
  8. f_10_30=PDF('F',x,10,30);
  9. output;
  10. end;
  11. run;
  12. run;
  13. proc gplot data=SAS_3_6;
  14. Title "F分布密度曲线";
  15. symbol1 color=red i=join v=none line=1;
  16. symbol2 color=blue i=join v=none line=2;
  17. symbol3 color=yellow i=join v=none line=3;
  18. symbol4 color=black i=join v=none line=4;
  19. symbol5 color=green i=join v=none line=5;
  20. symbol6 color=grey i=join v=none line=6;
  21. 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;/*添加图例*/
  22. run;
SAS教程[3]--第三章解答|《统计软件教程》(李东风版)|文艺数学君
  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: