最近在慕课上学习SAS,整理一下自己写的程序供以后查阅。
第一题
10名幼儿园小朋友的名字、性别、生日信息如表1。新建一个名为Child数据集,数据集中有四个变量,分别是name,gender, birthday, age,其中变量age是用赋值语句计算出来的每个小朋友的年龄,程序命名为grade01. sas.。
data Child;
input name $ gender $ birthday yymmdd12. ;
age=year(date())-year(birthday);
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;
第二题
针对SASHELP.CLASS数据集,按如下要求编写程序:
1)复制SASHELP.CLASS数据集,建立新变量BMI,其值为weight/(heightheight)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
data BMIclass;
set sashelp.class;
BMI=weight/(height*height)*1000; *建立新变量BMI;
run;
proc format;
value BMIclf low-<18.5='偏瘦'
18.5-<23.9='正常'
23.9-high='偏胖';
run;
proc print data=BMIclass;
var Name Sex Age BMI;
format BMI BMIclf.;
run;
data boy girl;
set BMIclass;
drop Sex;
format BMI 6.2;
if Sex="男" then output boy;
if Sex="女" then output girl;
run;
第三题
用程序stu_merge03.sas实现:
1)参见附件(如下),创建数据集stu_info和 stu_score,且合并生成新数据集student.
2〉输出显示数据集 student 中的id, subject, score, class列,并分别以标签”学号”,”科目”,”分数”和”班级”显示。
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 16 B
6 girl 15 B
;
proc sort;
by ID;
run;
data stu_score;
input ID SUBJECT$ SCORE;
cards;
1 Chinese 89
1 maths 79
2 Chinese 67
2 maths 84
3 Chinese 78
3 maths 83
4 Chinese 69
4 maths 85
5 Chinese 79
5 maths 69
;
proc sort;
by ID;
run;
data student;
merge stu_info stu_score; *合并数据集;
by ID;
run;
proc print label data=student; *以标签形式输出;
var id subject score class;
label id="学号" subject="科目" score="分数" class="班级";
run;