1、实验一 “SAS基本操作与数据集建立、浏览”【实验目的】掌握启动SAS的方法,熟悉常用的操作界面;理解SAS数据库、临时|永久数据集等基本概念,熟练掌握建立数据集、浏览编辑数据集的基本使用方法。【实验内容之一】输入下列程序,运行并保存在恰当的文件夹中:data tmp;input name$ birthday date9. score1 score2 score3 wage comma8.2 percent;cards;zhangsanfen 02-oct-76 78 81 65 1,256.12 0.21lisi 18-jan-75 74 93 65 1,080.5 0.15wangwu 1
2、4,feb,74 88 90 95 2,040. 0.3xuliu 30/jun/77 75 89 69 980.38 0.12proc print;format birthday monyy7. wage dollar4.2;run;上述程序建立了一个含有姓名、生日、项目13的考核分、工资、加薪比率这些字段的临时数据集tmp。实验指导有关知识SAS主界面中有几个常用的工作窗口:“编辑窗口”用于录入、编辑程序;“日志窗口”用于显示SAS系统运行信息;“输出窗口”用于显示运行SAS程序产生的文字输出结果;。SAS主界面上有几个常用的菜单:有关文件操作的功能都组织在“文件菜单”中,SAS程序的提交
3、运行、已运行过程序在编辑窗口的重新显示等功能组织在“运行菜单”中;。 【实验内容之二】 试用编程方法和菜单|工具条方式分别建立用户数据库MyLib和MySas。实验指导有关知识SAS主界面中工具条上有“创建新的数据库”工具图标,用于指定“库标识”与实际文件夹之间关联以创建一个逻辑数据库。用libname语句可以创建、取消逻辑数据库。LIBNAME语句的一般用法为:libname 数据库名 引擎 库位置;libname 数据库名 (库位置1 库位置2 );库位置通常是目录的全路径文件名表示;引擎为读写数据的格式说明,如v8,v6,xport等。【实验内容之三】有10位同学的名字、年龄、体重、身高
4、数据如下表所示; 试用多种手段将这些数据新建为一个存放在MyLib库下的health永久数据集。health数据集的内容NameAgeWeightHeightTom1040165Mike1142160Jack1046162Brown1041172Lucy1039155Gup1138166Lee946182Mary1039159Kate1137155Vencent1040160将上述程序输入编辑窗口并运行,观察输出结果和日志窗口中的内容。实验指导有关知识建立SAS数据集方法有两大类:一类是批处理式的,即用编程方法等建立数据集;另一类是交互式的,如在viewtable窗、Analyist、INSI
5、GHT等窗口中,交互录入数据。【实验内容之四】记事本stock.txt中存放有code(证券代码)、name (证券名称)、scale (流通盘)、EPS (每股收益)、share (投资组合中所占份额)、price (价格)的数据(以空格分隔),将其读入到SAS 临时数据集stock中。实验指导有关知识SAS数据步编程的基本结构为:data 数据集名;infile 文本格式数据的路径文件名;input 变量名表;run;data 数据集名;input 变量名表;cards;原始数据源run;结构1结构2input语句用于建立数据集的变量并从源数据中读入变量值;若建立的变量为字符型,则在变量名
6、后带上美圆号$。【实验内容之五】 试着将SAS数据集stock中的数据导出到Excel 表格stock.xls中。实验指导有关知识在FILE菜单中的IMPORT DATA和EXPORT DATA子菜单可实现一些常见数据格式的数据文件与SAS数据集之间的转换。实验二 “通过编程建立SAS数据集(1)”【实验目的】基本掌握编程建立SAS数据集的方法,熟练运用input语句的4种基本输入模式以及混合模式。【实验内容之一】有一个文本格式数据文件ex21.dat,其每行数据中含有工号(id)占前5位、姓名(Name)从第7-14位、部门号(dep)占据第1-2位、体重 (weight)占据第16-19位
7、,其部分数据如下:13011 zhangsan 52.802021 wangwuzi 64.310005 xuxiake 55.0试用列输入模式将其读入从而建立数据集dem21。实验指导有关知识对数据字段位置固定的源数据,用input语句读入数据时,可按列模式输入,其一般形式为:input 变量名1$ 开始列数-结束列数 变量名2 ;【实验内容之二】有一个文本格式数据文件ex22.dat,其内各行依次含有id (工号)、birthday (生日)、marryday (结婚纪念日)、salaray (薪水)四变量,其部分数据如下:100 07:31:68 31jul98 $21,456.2010
8、1 07/21/67 21jul97 $30,234.85102 05-22-66 22may96 $15,876.试用格式化输入模式将其读入从而建立数据集dem22。实验指导有关知识对数据字段位置固定的源数据,也可以采用格式化的输入模式更灵活地建立SAS数据集。一般形式:input 指针控制 变量名 输入格式名 ;适用范围:源文件中各变量所在位置必须是规则的(字段宽度固定);可用指针控制变量读入的始点,终点由输入格式确定;每个变量按输入格式读入指定的长度;该模式特点与列模式基本类似,但可读入多种格式的数值字段,尤其在输入日期型数据时应使用该模式。【实验内容之三】有一个文本格式数据文件ex23
9、.dat,其内各行依次含有id (学号)、name(姓名)、age (年龄)、score (成绩)四类数据,彼此间空格分隔,其部分数据如下:021496001 张三丰 21 596012256021 司马相如 22 612991034099 王小二 25 498试用列表输入模式将数据读入从而建立数据集dem23。实验指导有关知识对分隔符(通常为空格)固定的数据源,可以采用自由列表模式输入数据。一般形式为:input 变量名$ ; /*变量长度默认8,超过会截断*/其中,变量名指明数据集中要建立的变量,它们出现的顺序必须与数据源中的数据字段顺序匹配。一般情况下,变量的长度默认为8个字节,这对字符
10、型变量而言,只能存放8个字符(4个汉字)。length语句可改变变量的长度属性,一般形式为:length 变量名表$ 长度. ;另外,为突破变量的默认长度限制,也可以在列表输入模式中还可以加入输入格式修饰说明,一般形式为:input 变量名:$ 输入格式. ;【实验内容之四】通过DATA步内编程来建立一个由姓名(name)、学号(id)、生日(birthday)、性别(sex)、总分(score)组成的SAS数据集,并输出数据集。原始数据(不能改变其格式)部分如下:乔本鬼太狼 84/09/01 601.8 id=001 sex=男龟田次一郎 82/12/23 588.7 id=002 sex=
11、男山本美智子 87/01/18 623.3 id=003 sex=女张美萍 85/04/30 589.6 id=018 sex=女王晓刚 84/09/11 578 id=021 sex=男杨英 82/11/19 587.9 id=034 sex=女实验指导有关知识当源数据文件中的数据字段里包含字段名时,往往需要采用命名模式输入较为方便。一般形式为:INPUT 指针 变量名=$ . |;INPUT 变量名= $ 始列 -终列 .小数位 |;INPUT 指针 变量名=informat. |;对一些复杂的非标准的源数据文件,各数据字段需要不同的读入模式才能正确匹配,这时可在input语句中混合使用各
12、种读入模式。但注意,在混合模式中,命名模式必须出现在最后。【实验内容之五】上题中如要计算每人的年龄(age),应如何修改程序?实验指导有关知识利用date()、time()等函数获取系统日期和时间。例如:dt=date(); te=time();也能利用sysdate、systime系统宏变量获取日期时间。例如:dd=&sysdated; tt=&systimet;用SAS函数INTCK(int,from,to)可以计算from到to两个日期之间的间隔数int,当int取“year”时,则计算的是间隔年份。实验三 “SAS数据步编程建立数据集(2)”【实验目的】能综合运用数据步编程的各种输入模
13、式以及SAS函数,较熟练地将非规则的原始数据、多种数据格式准确地读入SAS数据集;熟悉常用的SAS函数,如系统日期时间函数、随机数发生器函数、对数/指数/三角/求和/差分等数学函数。【实验内容之一】编辑程序计算1989 年5 月1 日(01MAY89d)与2000 年7 月1 日(01JUL00d)之间相隔的天数,并输出在日志窗中。实验指导有关知识用SAS函数INTCK(int,from,to)可以计算from到to两个日期之间的间隔数int,当int取“day”时,则计算的是间隔天数。日期常数可用ddmmmyyd形式表示,其中ddmmmyy是date7格式的数据。【实验内容之二】用金融函数(
14、终值=compound(初值,.,复利率,期数); 复利率=compound(初值, 终值,.,期数);)计算在1980年7月1日存入1000元,年利率为1.25%,到2000年7月1日的终值,并输出在日志窗中;若要在20年内获得本利和共2000,则年复利率应达到多少?实验指导有关知识用SAS金融函数compound 可以计算资金的终值或利率。一般使用格式为:终值=compound(初值,.,复利率,期数); 复利率=compound(初值, 终值,.,期数);【实验内容之三】要建立一个含变量课程(course)、教师(teacher)、学生(student)、学号(id)、成绩(score)
15、的数据集。根据原始数据的2种不同情况,请分别编程:Math LiMingWangFang 1501 95English ZhangJunGeMing 1543 89Chinese ChenHongHeFei 1628 84:Statistics YangHuiWangFang 1501 95GeMing 1543 89HeFei 1628 84。实验指导有关知识RETAIN语句使其中的变量为保留变量,即在数据步的每次循环时,不被重新初始化。(有点类似C中的静态变量。) 使用格式:RETAIN 变量名1 初值1 变量2初值2; 或: RETAIN 变量名表 (初值表);SAS数据步循环执行的次数
16、被动态地保存在SAS预定义的变量 _n_ 中。使用if语句能实现有条件的执行某些SAS语句,一般使用形式为:IF 表达式 THEN 语句1;ELSE 语句2;注意:如果THEN或ELSE后需要一组语句时,可放在“DO;”和“END;”语句之间。算法思路(仅供参考,不是唯一的方法)第一种情况:在数据步内连续用两个input语句即可。第二种情况:在数据步内设置course、teacher变量为保留变量;首先仅当数据步循环在第一轮执行时,用input语句读入course、teacher的数据;随后对数据步每次循环都用input语句读入student、id、score的数据。【实验内容之四】使用随机数
17、函数生成服从标准正态分布的随机数100个,存放在数据集Norm内。实验指导有关知识SAS函数rannor(0)返回服从标准正态分布的随机数。【实验内容之五】在外部数据文件consume.dat(纯文本格式)中存放有A、B两市郊区若干期的人均消费额的数据,具体内容如下(注意:原文一字不差):Acity 3186 2775 1913 1536 2318 2254 1948 2131 3261 2066 3389 1961 2468 1853 2411 1864 1908 2524 2816 1668Bcity 994 1362 1176 1525 1441 1077 1847 1990 1221
18、862 1045 1379 1128 1182 3124 1769 2130 1096 1926 1408试用数据步编程建立变量为“城市名称(city)”、“人均消费(consume)”的SAS数据集。实验指导有关知识同【实验内容之三】。算法思路(仅供参考,不是唯一的方法)在数据步循环内,首先用input读入临时变量tmp的值;设置保留变量city;给变量consume赋初值0;接着判断tmp的值是否为Acity 或Bcity,如是则令city=tmp,如不是,则令consume=tmp,并将PDV缓冲器的内容输出到数据集而成为一条记录。【实验内容之六】用下列程序可建立某班学生学号num、班别
19、代号code的数据集:data chance;input num ;code=A01;cards;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2526 2728 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50proc print noobs;run;现在想在该班上以0.1的概率随机选代表参加校学代会,请设法修改上述程序,进行随机挑选,并使数据集chance中再增加一个列变量存放每人被挑选的结果。实验指导有关知识SAS函数ranun
20、i(0)将返回服从0,1均匀分布的随机数(模拟服从0,1均匀分布的随机变量)。若XU0,1(0,1均匀分布)则PX0.1=0.1,即事件“ranuni(0)260的观测提取出来,生成新的数据集tmp。实验指导有关知识用数据集选项(数据集名后圆括号内的选项)firstobs=n obs=m可以从数据集中挑选出第n条到第m条记录供数据步处理。用if语句、where语句可对记录进行条件筛选。【实验内容之二】在上题生成的数据集tmp中删除变量DATE中年份为八十年代的观测,以及删除变量ELECTRIC。实验指导有关知识可用数据集选项DROP=变量名表、KEEP=变量名表来删除或保留原有的一些变量,这样
21、的任务也可有drop和keep语句来实现。要删除记录可用delete语句。【实验内容之三】请用数据集fix中的数据去更新数据集xsfs(见实验四)。其中fix中数据为:950207李小丽21 500950106周缅21 640实验指导有关知识要用一个数据集的观测值对另一个数据集进行批量修改,可用数据步过程的UPDATE语句来完成。其语法格式为:UPDATE 主数据集 (IN=变量名) 修正数据集 (IN=变量名) (END=变量名);注意:要正确进行批量修正,UPDATE通常总是与BY语句配合使用,因而预先应将两数据集排序。【实验内容之四】请将数据集xsfs转置为数据集tmp实验指导有关知识利
22、用TRANSPOSE过程可将SAS数据集转置,使新数据集中的变量对应原数据集的观察,而新数据集的观察对应原数据集的变量。该过程通常的使用格式为:PROC TRANSPOSE 选项;VAR 变量表;ID 变量;IDLABEL 变量;COPY 变量表;BY 变量表;RUN;【实验内容之五】在数据集student(变量:name,id,sex)、chengji(变量:id,kno,score)、kecheng(变量:kno,kname)中用SQL窗查询满足条件成绩大于85分的学生姓名(name)、课程名(kname)、成绩(score)记录数据,并将查询结果生成SAS数据集report。实验指导有关
23、知识结构化查询语言SQL过程是一种在关系型数据库中广泛使用的标准查询语言,SAS系统使用PROC SQL过程实现对SQL的支持。SQL过程的基本格式:PROC SQL 选项表; ALTER TABLE alter语句说明项; CREATE create语句说明项; DISCRIBE discribe语句说明项; DROP drop语句说明项; INSERT insert语句说明项; RESET 选项表; SELECT select语句说明项; UPDATE update语句说明项; VALIDATE validate语句说明项; CONNECT TO DBMS名 AS 别名 选项表; DISC
24、ONNECT FROM DBMS名|别名; EXECUTE (SQL语句) BY DBMS名|别名;RUN;在SAS中,可以用查询器来完成对数据集的SQL查询操作,只要单击菜单项“Globals=Access=Query”即可打开SQL查询表窗口,进行数据查询。【实验内容之六】用SQL窗查找出GPA数据集中gpa大于5的所有记录并且计算出它们的gpa的平均值实验指导有关知识同上。实验六“数据步编程综合练习”【实验目的】综合运用SAS数据步方法,结合概率统计常识,解决一些简单的实际问题。希望通过实验练习,对SAS数据步编程的有关重点、难点有较深刻的认识。【实验内容之一】已知一个数据集a中有五个变
25、量x1-x5,且只有一个观测,其值为2,5,7,3,1。现将a数据集扩充成10个观测,其值全与第一条相同,应如何编程?实验指导有关知识(1)在SAS数据步中可用DO语句、DO WHILE语句实现计数循环和条件循环。DO语句调用格式:格式1:DO 循环变量=初值 TO 终值 BY 增量; 循环体; END;格式2:DO 循环变量=值1,值2,值n; 循环体; END;功能为满足循环条件(从初值到终值计数)时重复执行循环体内的SAS语句。DO UNTIL语句调用格式:格式:DO UNTIL 表达式; 循环体; END;直到表达式值为真(非0)时,循环才终止。DO WHILE语句调用格式:格式:DO
26、 WHILE 表达式; 循环体; END;当表达式值为真(非0)时,反复执行循环体中的语句。(2)在SAS数据步中用OUTPUT语句可以明确指示将观测记录数据缓冲器中的内容写入数据集,使其成为数据表中真正地一条观测记录。算法思路(仅供参考,不是唯一的方法)读入一条原始数据进入缓冲器后,利用循环将其内容OUTPUT十次。【实验内容之二】要在50人中恰好随机选5人,应如何编程?实验指导有关知识用LEAVE语句可跳出循环。算法思路(仅供参考,不是唯一的方法)【实验内容之三】有三种产品A、B、C,8小时内每小时每品种抽查一个测量其重量,抽检数据如下:7 9 8 6 8 7 6 9 8 5 9 76 8
27、 9 9 6 7 8 7 8 6 7数据的格式为A1 B1 C1 A2 B2 C2 A8 B8 C8。试建立一个数据集dat1,内含变量:小时hour、品种type(取A、B、C值)和样品重量w。(提示:可用循环do hour=1 to 8;do type=A,B,C; end;end;二重循环来简化编程代码)实验指导有关知识算法思路(仅供参考,不是唯一的方法)【实验内容之四】若要将3中建立的数据集dat1转换成内含变量hour和三个产品各自重量w1、w2、w3的新数据集dat2,该如何编程。若要将数据集dat2再还原成dat1又该如何?实验指导有关知识算法思路(仅供参考,不是唯一的方法)【实验内容之五】某一数据集dat内有14个数值型变量x1-x14,试利用数组、循环等语句将该数据集中的缺失值改变为-1,并对每条观测求和。数据集dat中的数据为:7 . 4 6 8 3 7 8 0 1 5 6 4 73 5 8 . 2 6 3 4 1 7 5 3 5 0实验指导有关知识算法思路(仅供参考,不是唯一的方法)实验指导有关知识算法思路(仅供参考,不是唯一的方法)
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100