文章目录(Table of Contents)
前言
这是关于《统计软件教程》(李东风版)第二章的答案的解答,就直接给出了,没什么解释了。
2.1
题目要求
代码:
- title "求10000以内的素数";
- data prime;
- n=2;
- output;
- do n=3 to 10000 by 2;
- do i = 2 to n-1;
- if mod(n,i) = 0 and i^=n-1 then leave;
- if i = n-1 then output;
- end;
- end;
- run;
- Data SAS2;
- Set prime;
- Keep n;
- Run;
- proc print data = SAS2;
- run;
上述代码可以将10000以内的素数保存在sas2这个数据集中,我们打开数据集,可以看到如下的结果。
2.2
题目要求
- Title 't分位双侧分位数表';
- data dist;
- /*file print; */
- file 'C:\Users\JCSY001\Desktop\extre_file\3.作业\分位数.txt'; /*写入文件*/
- put "水平数 " " 自由度 " " 分位数 " ;
- do p=0.001,0.002,0.005,0.01,0.05,0.1,0.2;
- df=1;
- do until(df > 100);
- fenweishu = tinv((1-p/2),df);
- output;
- put p 1-6 .3 df 7-12 fenweishu 13-25 .3; /*控制输出的格式 */
- df = df + 1;
- end;
- end;
- run;
我们使用file 'C:\Users\JCSY001\Desktop\extre_file\3.作业\分位数.txt,可以控制put的内容保存到这个txt文档中,使用file print可以使得put的内容显示在输出窗口。最后打开分位数.txt文档,可以看到t分布的分位数,如下图所示:
2.3
题目要求
- data _null_;
- x = MDY(12,07,1995);
- y = MDY(01,01,2000);
- day = intck('day', x , y);
- put "day = " day;
- run;
当然,我们也可以计算从出生日期到当前的日子的天数。
- data _null_;
- x = MDY(12,07,1995);
- y = MDY(07,04,2017);
- day = intck('day', x , y);
- put "day = " day;
- run;
2.4
题目要求
2.4.1
先使用input和cards将数据存储到数据集teachers , g1 , g2 , g3中,代码如下:
- data teacher ;
- input group teacher_name $;
- cards;
- 1 张敏
- 2 李秀丽
- 3 曾维薇
- ;
- run ;
- data g1;
- input group student_name $;
- cards;
- 101 刘娜
- 102 张秀敏
- 103 于长江
- ;
- run;
- data g2;
- input group student_name $;
- cards;
- 201 方开祥
- 202 耿火清
- 203 李芳
- ;
- run;
- data g3;
- input group student_name $;
- cards;
- 301 何明
- 302 孙成秀
- 303 张克成
- ;
- run;
运行完毕后我们可以在SAS资源管理其中看到四个数据集。
2.4.2
- data new;
- set g1 g2 g3;
- length teacher$25; /*要更改teacher字符串的长度*/
- if group=101 or group=102 or group=103 then teacher = "张敏";
- if group=201 or group=202 or group=203 then teacher = "李秀丽";
- if group=301 or group=302 or group=303 then teacher = "曾维薇";
- run;
> 注意上面的程序需要将第一问的程序执行后才能执行。
在这里要注意的是要加上length teacher$ 25来控制teacher这个变量的字符串的长度,否则默认是显示不全的。
2.5
题目要求
2.5.1
- data guke ;
- length name$ 25 sex$ 25 place$ 25 day$ 25 ;
- /*需要改变字符串长度*/
- input name$ sex$ place$ day$ money;
- cards;
- 章文 男 华东 1996-3-20 1099
- 王国铭 男 华东 1996-5-19 39
- 童子敏 女 华北 1996-1-5 986
- 刘念新 男 华北 1997-10-1 3581
- 李思今 女 华北 1997-4-4 659
- 关昭 女 东北 1996-11-5 358
- 赵霞 女 东北 1998-9-6 2010
- ;
- run ;
这一问也需要使用length来改变字符串的长度,得到的结果如下图所示。
2.5.2
我们使用if语句来找出在男性顾客中购买金额大于1000的人。
- data _null_;
- file print ;
- set guke;
- if money > 1000 and sex="男" then put "名字 : " name;
- run;
2.5.3
按照题目要求使用keep将数据集拆成下面的两个数据集。
- data data1;
- set guke;
- keep name sex place;
- run;
- data data2;
- set guke;
- keep name day money;
- run;
2.5.4
使用merge函数将上面拆开的两个数据集再合并。
- Data data;
- Merge data1 data2;
- Run;
2.6
题目要求
2.6.1
使用两个循环,来生成50*101的变量列表。
- data d1;
- array x(100);
- do i=1 to 50;
- do j=1 to 100;
- x(j)=normal(0);
- end;
- output;
- end;
- drop i j;
- run;
2.6.2
关于宏的使用省略
2.6.3
也需要用到宏的知识,故省略没做。
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论