MOOC武大SAS——第二章作业

学习SAS语言一章,用数据步建立数据集,注意不同类型变量的表示、复制数据集、合并、拆分数据集等操作;用过程步,按指定的要求和格式输出数据。
本次作业需完成并提交3个SAS程序:
1)grade01.sas
2)classBMI02.sas
3)stu_merge03.sas

1.( 30分 )

10名幼儿园小朋友的名字、性别、生日信息,见附件表1。新建一个名为Child数据集,数据集中有四个变量,分别是name,gender,birthday,age,其中变量age是用赋值语句计算出来的每个小朋友的年龄,程序命名为grade01.sas。

关键是计算年龄:

i. 使用函数:intck()——计算,date()——当前日期

ii. 变量age是运算得到,可以不用input进行定义,直接使用

iii. yyddmm10. 与 yyddmms10. 的区别:前者间隔符为短横线,后者为斜线

data c1;
input name$ gender$ birthday yymmdd10.;
cards;
刘明铭 男 2012/11/11
李敏洁 女 2014/3/15
代子清 男 2014/9/20
夏天 男 2013/4/1
郭悦 女 2013/7/25
胡月玲 女 2013/7/20
程彬 女 2014/10/9
杨帆帆 男 2016/10/9
刘进 男 2016/5/10
张思凡 女 2015/8/19
;
run;

DATA Child;
set C1;
b=date();
age=intck('year',birthday,b);
drop b;
run;

proc print;
FORMAT birthday yymmdds10.;
title 'Child';
RUN;

2

( 30分 )

‏针对SASHELP.CLASS数据集,按如下要求编写程序:

1)复制SASHELP.CLASS数据集,建立新变量BMI,其值为weight/(height*height)*1000,新数据集命名为BMIclass;

‏2)用proc print过程输出数据集BMIclass中NAME,SEX, AGE,BMI四个变量的观测值,其中,BMI值用FORMAT过程定义输出格式,使得变量BMI输出形式为:

BMI值<18.5 ,输出显示“偏瘦”;

18.5=<BMI值<23.9,输出显示“正常”

BMI值>=23.9,输出显示“偏胖”

‏3)将数据集BMIclass按性别拆分为二个名为boy、girl的新数据集,新数据集中不需有性别变量,且BMI值的输出格式为6.2,即输出显示到小数点后2位。

程序命名为classBMI02.sas

OK,修改好了,下面的这个是正确的。

i. Proc format的使用,注意细节!!!

        proc format;        这里有一个分号

        value的这一部分,只有一个分号,有两个 ‘ < ’ 

ii. Data步里面format的使用

        format bmi b.;        请不要忘了,这里的b右下角有个点          -_-

data BMIclass;
set sashelp.class;
BMI=weight/(height*height)*1000;
keep name sex age bmi;
run;

proc format;
value b low-<18.5='偏瘦'
		18.5-<23.9='正常'
		23.9-high='偏胖';
run;

proc print data=bmiclass;
format bmi b.;
title 'BMIclass';
run;

data boy girl;
set BMIclass;
if sex='女' then output girl;
else output boy;
drop sex;
format bmi 6.2;
run;

proc print
data=boy;
title 'boy';
run;

proc print
data=girl;
title 'girl';
run;

3

( 40分 )

‌用程序stu_merge03.sas实现:

‌1)参见附件,创建数据集stu_info和stu_score,且合并生成新数据集student.

‌2) 输出显示数据集student中的id,subject,score,class列,并分别以标签”学号”,”科目”,”分数"和”班级"显示。

有几个写的时候注意的点:

i. 导入的数据,可以先在excel里面敲,然后复制-粘贴过来,注意不要改动间隔,它们之间是制表符【Tab】,SAS可以识别

ii. 使用merge不要忘记了,by语句

iii. 命名标签的时候,在DATA步里使用label语句就可以直接定义变量标签,注意,定义多个变量的标签,一个label就够了!!分号也只用一个!!

iiii. 最后,输出的结果变量显示为标签,只需在Proc print语句的,数据集名后,加上label

data stu_info;
input id sex$ age class$;
cards;
1	boy	14	A
2	girl	15	A
3	girl	15	A
4	boy	16	B
5	boy	15	B
6	girl	15	B
;
RUN;

data stu_score;
input id subject$ score;
cards;
1	chinese	89
1	math	79
2	chinese	67
2	math	84
3	chinese	78
3	math	83
4	chinese	69
4	math	85
5	chinese	79
5	math	69
;
run;

data student;
merge stu_info stu_score;
by id;
label id='学号'
     subject='科目'
     score='分数'
     class='班级';
drop sex age;
run;

title 'student';
proc print
data=student label;
run;

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值