为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > SAS基本教程

SAS基本教程

2013-04-24 47页 pdf 486KB 22阅读

用户头像

is_633243

暂无简介

举报
SAS基本教程 SAS-Fundamental 1 S A S 基 本 教基 本 教基 本 教基 本 教 程程程程 郭建南郭建南郭建南郭建南 收集编写收集编写收集编写收集编写 第第第第 1章章章章 SAS初阶初阶初阶初阶 §1.1 初识 SAS 1.1.1 启动 用如下方法可以进入 SAS系统的窗口运行环境 在 Win95或 NT环境中 从开始菜单的程序...
SAS基本教程
SAS-Fundamental 1 S A S 基 本 教基 本 教基 本 教基 本 教 程程程程 郭建南郭建南郭建南郭建南 收集编写收集编写收集编写收集编写 第第第第 1章章章章 SAS初阶初阶初阶初阶 §1.1 初识 SAS 1.1.1 启动 用如下可以进入 SAS系统的窗口运行环境 在 Win95或 NT环境中 从开始菜单的程序文件夹中找到 SAS系统文件夹 从中启动 SA S系统 或者生成 SAS.EXE的快捷方式 把 SAS.EXE用鼠标右键拖到桌面 双击 SAS.EXE启 动 在 Windows 3.xx环境中找到 SAS系统程序组中的 SAS图标双击启动 1.1.2 SAS AWS SAS应用工作空间 图 1 SAS AWS 启动后 出现如图 1 的 SAS运行界面 术语称为"SAS工作空间 SAS Application WorkSpace " 它象其它 Windows应用程序一样 在一个主窗口内 包含若干个子窗口 并有菜单条 工 具栏 状态栏等 SAS有三个最重要的子窗口 程序窗口 PROGRAM EDITOR 运行窗口 LOG 输出窗 口 OUTPUT 程序窗口的使用类似于 Windows中的记事本程序 可以在其中编辑文本文件 主要是编辑 SAS 程序 程序可以直接在窗口中键入 插入新行用回车 插入点光标 闪动的竖线 可以用光标 键 上下左右箭头 Home End 移动或用鼠标单击到某一处 按住 Shift再按光标键可以加亮 显示一块文 本 然后用复制 剪切 粘贴命令 Edit菜单中的 Cut Copy Paste 或工具栏图标 可以 复制或移动加亮显示的文本 这些编辑操作具体请参考 Windows的有关文档 运行记录窗口记录程序的运行情况 运行是成功还是出错 运行所用时间 如果出错 错在 什么地方 运行记录窗口中以红色显示的是错误信息 输出窗口显示 SAS程序的文本型输出 图形输出单独有一个 GRAPHICS窗口 输出分页显示 要把光标移动到某一窗口 可以用主菜单中的 Window菜单选择要显示的窗口 用功能键 F5可 以切换到程序窗口 F6可以到运行记录窗口 F7可以到输出窗口 SAS主窗口标题栏下是主菜单 SAS菜单是动态的 其内容随上下文而不同 即光标在不同窗 口其菜单也不同 其中 File 文件 菜单主要是有关 SAS文件调入 保存及打印的功能 Ed it 编辑 菜单用于窗口的编辑 如清空 复制 剪切 粘贴 查找 替换 Locals 局部 菜单与当 SAS-Fundamental 2 前正在进行的操作有关 如果你正在程序窗口中编辑程序 则 Locals菜单有提交运行 调回 修改等项 如果在运行记录窗口或输出窗口则 Locals菜单项根本不出现 Globals菜单内容比 较复杂 它可以打开被关闭的程序窗口 运行记录窗口 输出窗口 图形窗口 可以进入 SAS 提供的各个独 立模块 主菜单下是一个命令条和工具栏菜单 命令条主要是用于与 SAS较早版本的兼容性 可以在这里键入 SAS的显示管理命令 工具栏图标提供了常见任务的快捷方式 比如保存 打 印 帮助等等 鼠标光标在某一工具栏图标上停留几秒可以显示一个说明 工具栏图标的解释 如下 Submit 提交编辑窗口中的程序 New 清空编辑窗口 Open 打开文件到编辑窗口 用户指定一个文件调入到编辑窗口内 这个文件从此与编 辑窗口相关联 以后的存盘操作将自动存入这个文件 Save 存盘 保存编辑窗口内容 注意如果此窗口已经与一个文件相联系的话此功能将 覆盖文件的原有内容而不提示 Print 打印当前窗口内容 Print preview 打印预览 Cut 剪切选定文本 Copy 复制选定文本 Paste 粘贴 注意这些操作是对 Windows剪贴板进行的 可以用来与其它 Windows应用程 序交换文本 数据等 剪切或复制到剪贴板的内容可以被其它应用程序粘贴 其它应用程序放 到剪贴板的内容也可以粘贴到 SAS的编辑窗口中 Undo 撤销刚才的编辑操作 DOS prompt 临时进入 DOS Browse 打开 WWW浏览器并进入 SAS公司的主页 www.sas.com Directories 进入 Directory 窗口 可以浏览各 SAS目录的内容 可以浏览目录 中的数据集 SAS目录的内容 SAS/ASSIST 启动 SAS的菜单驱动界面 SAS/ASSIST Help 启动 Windows的帮助系统进入 SAS的帮助 1.1.3 简单运行样例 假设我们有一个班学生的数学成绩和语文成绩 数学满分为 100 语文满分为 120 希望计算 学生的平均分数 按百分制 并按此排名 可以在程序窗口输入此程序 title '95级 1班学生成绩排名'; data c9501; input name $ 1-10 sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run; proc print;run; SAS-Fundamental 3 proc sort data=c9501; by descending avg; run; proc print;run; 实际上 输入这样包含中文的程序最好办法不是在 SAS程序窗口直接输入 因为 SAS目前对中 文输入的处理还不够完善 好的办法是打开一个其它的编辑程序如 Windows中的记事本 在 Wi n95中用开始菜单中的"程序 | 附件 | 记事本"启动 在记事本中复制输入的程序 然后到 SAS系统程序窗口中使用粘贴命令 用 Edit菜单的 Paste或工具栏上的粘贴图标 把程序复制到 SAS中 也可以在记事本中把编好 的 程序存盘 然后在 SAS程序窗口用 File菜单的 Open命令打开保存好的程序文件 要运行此程序 只要用鼠标单击工具栏的提交图标 或用 Locals菜单的 Submit命令 运行后 运行记录窗口出现如下内容 50 title '95级 1班学生成绩排名'; 51 data c9501; 52 input name $ 1-10 sex $ math chinese; 53 avg = math*0.5 + chinese/120*100*0.5; 54 cards; NOTE: The data set WORK.C9501 has 5 observations and 5 variables. NOTE: The DATA statement used 0.11 seconds. 60 ; 61 run; 62 proc print;run; NOTE: The PROCEDURE PRINT used 0.0 seconds. 63 proc sort data=c9501; 64 by descending avg; 65 run; NOTE: The data set WORK.C9501 has 5 observations and 5 variables. NOTE: The PROCEDURE SORT used 0.05 seconds. 66 proc print;run; NOTE: The PROCEDURE PRINT used 0.0 seconds. 其中记录了每段程序的运行情况 所用时间 生成数据保存情况 如果有错误还会用红色指 示错误 比如 最后的 proc print后面的分号如果丢失 记录窗口显示如下错误 67 proc printrun; SAS-Fundamental 4 -------- 181 ERROR 181-322: Procedure name misspelled. 错误说明为过程名错拼 但实际上是丢了分号导致 print和 run连成了一个词 在程序窗口用 "Locals | Recall text"菜单或按 F4功能键可以调回程序修改 正确运行后输出窗口出现如下 结果 95级 1班学生成绩排名 3 OBS NAME SEX MATH CHINESE AVG 1 李明 男 92 98 86.8333 2 张红艺 女 89 106 88.6667 3 王思明 男 86 90 80.5000 4 张聪 男 98 109 94.4167 5 刘颍 女 80 110 85.8333 95级 1班学生成绩排名 4 OBS NAME SEX MATH CHINESE AVG 1 张聪 男 98 109 94.4167 2 张红艺 女 89 106 88.6667 3 李明 男 92 98 86.8333 4 刘颍 女 80 110 85.8333 5 王思明 男 86 90 80.5000 这里有两页输出 第一页是输入数据后用 PROC PRINT显示的数据集 第二页为按平均分排名 后的结果 从上面的例子程序可以看出 SAS程序的一些特点 SAS程序由语句组成 语句用分号结束 SA S程序中大小写一般不区分 字符串中要区分大小写 SAS程序中的空格 空行一般可以任意 放置 这样我们可以安排适当的缩进格式使得源程序结构清楚易读 SAS程序由两种"步"构成 一种叫数 据步 data step 一种叫过程步 proc step 分别以 DATA语句和 PROC语句开始 数据 步和过程步由若干个语句组成 一般以 RUN语句结束 SAS基本概念 本节介绍一些 SAS特有的概念 其中最重要的是数据集 SAS数据集 SAS数据集 SAS Datasets 由若干行和若干列组成 类似于一个矩阵 但各列可以取不同的类型值 比如整 数值 浮点值 时间值 字符串 货币值等等 SAS数据集存放在以特殊格式存放的二进制文 件中 我们用一个 SAS中的逻辑名来使用 SAS数据集而不需关心它到底如何存储在磁盘上 比 如 0的例子生 成了一个名为 C9501 的数据集 它的逻辑形式如下表 SAS-Fundamental 5 NAME SEX MATH CHINESE AVG 李明 男 92 98 86.8333 张红艺 女 89 106 88.6667 王思明 男 86 90 80.5000 张聪 男 98 109 94.4167 刘颍 女 80 110 85.8333 数据集的每一行叫做一个观测 Observation 每列叫做一个变量 Variable SAS数据 集等价于关系数据库系统中的一个表 实际上一个 SAS数据集有时也称作一张表 在数据库术 语中一个观测称作一个记录 一个变量称作一个域 在 C9501数据集中有 5个观测 分别代表 5 个学生的情况 而每个学生有 5个数据 分别为姓名 性别 数学成绩 语文成绩 平均分 所以此数据集 有 5个变量 从上面看出 数据集要有名字 变量要有名字 所以 SAS中对名字 数据集名 变量名 数据 库名 等等 有约定 SAS名字由英文字母 数字 下划线组成 第一个字符必须是字母或下 划线 名字最多用 8个字符 大写字母和小写字母不区分 比如 name abc aBC x1 year 12 _NULL_ 等是合法的名字 且 abc和 aBC是同一个名字 而 class-1 不能有减号 a bit 不能有空 格 serial# 不能有特殊字符 Documents 超长 等不是合法的名字 SAS数据库 SAS数据集是各种特殊格式的 SAS文件中最重要的一种 另一种重要的 SAS文件是 SAS目录 Ca talog 用来保存各种不能表示成行列结构表格形式的数据 比如系统设置 图象 声音等 多个 SAS文件可以放在一起 称为一个 SAS数据库 Library 数据库有一个库名 Libnam e 其命名 遵循上述 SAS名字命名原则 在 MS DOS/Windows环境中 一个 SAS数据库实际是磁盘上的一个子目录 特殊情况下一个数据库可 以由几个子目录组成 为了把库名和子目录联系起来 使用 LIBNAME语句 比如 我们在 C: \Y1995子目录中保存了几个 SAS数据集 可以用如下语句把库名 MYLIB与子目录 C:\Y1995联 系起 来 libname mylib "c:\y1995"; 有三个预定义的 SAS数据库 WORK SASUSER SASHELP 其中 WORK数据库叫做临时库 存放 在其中的 SAS文件叫临时文件 这些临时文件当退出 SAS系统时会被自动删除 SASUSER库保 存 与用户个人设置有关的文件 它是永久的 即退出 SAS时文件不会被删除 SASHELP库保存用 S AS帮助系统 例子有关的文件 是永久的 从上面看出 SAS文件分为临时文件和永久文件 临时文件在退出 SAS系统时自动被删除 永 久文件在退出 SAS系统时不自动被删除 所以 我们把作为中间结果使用的数据集或练习用的 数据集作为临时数据集保存 而需要以后再用的数据集则可以保存为永久数据集 临时数据集 和永久数据 SAS-Fundamental 6 集的区别是 临时数据集可以用单水平名 即只有数据集名 比如 C9501 而永久数据集名由 两部分组成 前一部分是它的库名 后一部分才是数据集名 两部分中间用小数点连接 比如 放在 MYLIB库 即"C:\Y1995"子目录 中的数据集 TEACH必须用 MYLIB.TEACH表示 这样指定 的 数据集名在 生成时可以放到由库名指定的子目录中 在读取时可以到指定的子目录读取 并且不会被自 动删除 临时数据集除用单水平名外 也可以用库名为 WORK的两水平名 如 WORK.C9501 和 C 9501 是一样的 要生成永久数据集 只要在指定要生成的数据集名时使用两水平名且库名已有定义 比如 要把上面的 C9501数据集在生成时就放到"C:\Y1995"子目录中 可以用如下语句 libname mylib "c:\y1995"; data mylib.c9501; …… proc sort data=mylib.c9501; …… 图 2 Libraries窗口 这个程序和 0的例子相比只是增加了一个定义库名的 LIBNAME语句 然后在所有用到数据集名 C9501 的地方换成了两水平名 MYLIB.C9501 要注意生成的数据集是 MYLIB.C9501 后面在用到它 的时候 在 PROC SORT中 也必须使用两水平名 MYLIB.C9501 而不能使用单水平名 C9501 这两个名字指向的不 是同一个 SAS文件 为了显示现有定义的数据库 只要单击工具栏的 图标 如图 2 不需编程的 SAS应用――SAS/INSIGHT 图 3 打开数据集 SAS的使用方法一般是象 0那样输入一个程序 运行 修改 最后在输出窗口得到结果 随着 图形界面 用户友好等程序思想的发展 SAS也逐渐提供了一些不需要学习 SAS编程就能进行 数 据管理 分析 报表 绘图功能 其中做得比较出色的一个是 SAS/INSIGHT模块 SAS/INSIGH T是在基本的 SAS系统基础上添加的一个模块 提供了数据交互输入 数据探索 研究分布 相关分析 各 种图形等功能 这里我们简单介绍 SAS/INSIGHT的简单使用 图 4 SAS/INSIGHT 要启动 SAS/INSIGHT 选 Globals | Analyze | Interactive data analysis菜单 首先出现图 3那样的选择数据集的窗口 这是 SAS/INSIGHT必须先选择一个要分析 观察的数 据集 如果要生成新数据集 按 New按钮 如果要打开已有数据集 按 Open按钮 图 4是 SAS/INSIGHT运行时的样子 数据窗口 图 5 SAS/INSIGHT数据窗口 图 6 数据窗口菜单 SAS-Fundamental 7 图 7 修改变量名和属性 SAS/INSIGHT提供了一个类似于电子表格的数据窗口来管理数据集 图 5为显示了数据集 SAS USER.CLASS的数据窗口 我们看到 其标题行显示了打开的数据集的名字 标题行下左上角有 一个小的向右三角 这是数据窗口的菜单 见图 6 三角下方的 19是观测行数 右方的 5是变量个数 窗口内每行最左边的方块是观测的绘图 标记 用于在图形中标记标量 然后是观测序号 再往右是各变量的值 数据窗口中的各变量 用作列标题 如图 5中的 NAME SEX AGE HEIGHT WEIGHT就是数据集 SASUSER.CLASS中的五个变量的名字 在 每一个变量名的上面有两个标签 右边一个代表变量的量测水平 分为区间变量 Int 和名 义变量 Nom 区间变量是取连续值的变量 只能为数值 名义变量是取离散值的变量 一 般为字符型 也可以取数值 变量名上面左边的标签代表变量在分析中的缺省用途 比如 NAME上面的 Labe l表示此变量的值 学生姓名 在绘图中用来标记观测 SEX上面的 Group表示此变量 性别 用来分组 等等 数据窗口可以用来建立新数据集 在 SAS/INSIGHT内用"File | New"菜单或在启动 INSIGHT的 窗口 图 3 按"New"按钮 这时出现一个空的数据窗口 这时 可以直接向第一行输入数据 比如要 输入 0中的 C9501数据集 就可以在第一行的前四列中分别输入李明 男 92 98 这时各列 自 动取变量名为 A B C D 而且量测水平自动定为前两个字符型是名义变量 Nom 后两个 数值型是区 间变量 Int 为了修改变量名和变量的用途 从数据窗口的菜单 图 6 选 Define Vari ables 出现图 7的定义变量窗口 在这里可以修改变量名 可以选择变量的量测水平 可以 规定变量的用途 图 8 保存数据集 定好变量名等属性后就可以继续输入数据 直至把全部数据输完 为了保存输入的数据集 选"File | Save | Data"菜单 出现图 8那样的输入数据集的窗口 可以选择数据集放在哪一个数据库 可以输入一个数据集名 把 这里的 A改成 c9501 按 OK钮就可以保存数据集 对于比较小的数据集 几个 十几个变量 几 十个观测 用 SAS/INSIGHT的数据窗口可以迅速而直观地输入 对于更大量的数据 一般从 其它格式转 换而得 在数据窗口中如果需要修改某一个值 只要直接用鼠标点到其单元格修改 然后把输入光标 离开其所在行就实现了修改 在单元格之间移动可以用鼠标单击 制表键 回车 上下光标键 等方法 要保存所作的修改还需要用"File | Save | Data"菜单 当数据窗口中变量较多时 可以用滚动条滚动窗口内容来查看 如果某个变量比较重要 可 以考虑把它放到第一列的位置 这只要先单击该变量的名字选中它 然后在图 6的菜单中选 M ove to First 要把某列移到最后 选中它后用 Move to Last菜单 选中一列只要单击其变量名 如果要选中多个列 在选中一个后按住 Ctrl键单击其它的名字 可以添加选中其它变量 选中一个变量后按住 Shift单击另一个变量名可以选中这两个变量及 SAS-Fundamental 8 它们之间的所有变量 选中的多个列也可以用 Move to First和 Move to Last移动 要选中一个观测 行 只要单击其观测号 行号 选多个观测可以用 Ctrl单击或 Shift单 击的方法 选中的观测也可以用 Move to First和 Move to Last移动到最前或最后 要取消所有选中 只要单击某一单元格而不是行 列标题即可 变量作 而是对两个离散变量来作 比如 先把 SASUSER.CLASS中变 量 AGE的量测水平由 Int改为 Nom 然后取消所有变量的选定 启动"Box Plot/Mosai Plot" 选 SEX为 Y变量 选 AGE为 X变量 作图如图 16 这种图的好处是直观显示了两个变量每种取值组合的观测个数和比例 单击或双击其中 一个方块可以迅速选中一个分组 比如双击年龄为 11 性别为女 F 的方块可以看到这一组的 学生 1.3.4 数据探索――二维 SAS/INSIGHT可以作曲线图 散点图 散点图矩阵 可以在散点图中刷亮观测 图 17 曲线图选择变量的对话框 图 18 CO和 WIND的曲线图 曲线图有一个取值由小到大的 X变量 有一个或几个 Y变量 以 X变量为横坐标对 Y变量画曲 线 为了演示曲线图 打开 SASUSER.AIR数据集 用"File | Open"菜单 这个数据集是德国某城市一周的每小时记录的空气污染情况 变量 DATETIME是 记录的日期时间 为特殊 SAS格式数据 变量 DAY为星期几 HOUR为几点钟 CO O3 SO2 NO DUST分别为一氧化碳 臭氧 二氧化硫 一氧化氮 粉尘的浓度 WIND为风速 要画一氧化 碳的曲线图 可以在未选任何变量的情况下用"Analyse | Line Plot" 弹出变量对话框 图 17 选 DATETIME为 X变量 CO为 Y变量 可以画出 CO的时间序列曲线图 单击曲线上某一 个 点可以显示其观测序号 双击可以检查观测 如果想单击曲线上点时不显示观测序号而显示记 录时间是几点 可以在曲线图窗口中选主菜单的"Edit | Window | Renew" 可以再弹出变量窗口 选 HOUR并按 Label钮把时间指定为标签变量 这时在作的 CO 的 曲线图上单击一个点显示的就是记录时间了 可以看出 CO的高峰一般在早晨 8点和晚上 17点 21 点 用图形菜单 右键或单击向右三角 中的 Observations可以画出各个数据点的符号 可以在图上同时画出多条曲线 比如 想考察风速对污染的影响 在图形窗口中再用主菜单 的"Edit | Window | Renew" 把 WIND也作为 Y变量 画出的图就有两条不同颜色的曲线 单 击 外面的 CO变量符号和 WIND变量符号可以加重显示对应的曲线以区分这两条曲线 见图 18 图中被选的点是风速的最高值 时间是 11 点 注意在一条曲线中被选在另一条曲线中也 SAS-Fundamental 9 被选 从此图可以看出风速对污染有较明显的影响 风大时污染较轻 图 19 体重对身高的散点图 散点图也有一个 X变量和一个 Y变量 但不要求 X变量有从小到大的次序 画图不用连线而是 用 散点画出每一对 X Y坐标 比如对 SASUSER.CLASS 我们希望通过画图了解身高和体重的关系 在数据窗口中先选定体重 Y轴变量 再附加选定身高 X轴变量 启动菜单"Analyze | Scatter Plot" 就可以生成以体重为纵轴以身高为横轴的散点图 见图 19 从图可以看出体重与 身高有明显的线性相关关系 为了解哪一个点代表哪一个学生 单击一个点可以显示其观测序号 双击可以检查观测 为 了在单击时可以显示学生名字而不是观测序号 需要把 NAME指定为标签变量 这可以在生成散 点图时先不在数据窗口选 X Y变量而是直接启动"Analyze | Scatter Plot"菜单 弹出变量对话框 在其中选 X Y变量并把 NAME指定为 Label变量 这时 单击散 点图中最左下角的那个点可以显示名字 Sandy 单击最右上角的那个点可以显示 Philip 选多 个点可以用附加选中的办法 Shift或 Ctrl单击 图 20 年龄 身高 体重的散点图矩阵 为了在散点图中选定多个点 SAS/INSIGHT还提供了一种称为"刷亮 Brushing "的操作 在 图中拖动鼠标光标可以拖出一个小长方形 在这个长方形中的点都被选中 称它为刷子 选中 的点在 Curves菜单被开放 在 Tables菜单中可以选加一些统计表 比如 Frequency Table是频数表 为每一观测值的频数 累计频数 百分比 C.I. for Mean可以计算均值的 各种置信度的置信区间 Location Tests用于检验均值为某常数值 一般是 0 的假设 可以 用 t检验 符号检验 符号秩检验 Gini's Mean Difference是变量分布分散程度的一种稳健估计 计算为 对正态分布其期望值为 Trimmed Mean, (1/2)N计算去掉最大(1/2)N个和最小(1/2)N个值后的平均值 (1/2)N可以指 定 为 1 2 3或自定值 这是变量中心位置的一种稳健估计 但估计量本身不再服从正态分布 Trimmed Mean, (1/2)Percent指定去掉最大 最小的百分之多少再计算均值 Winsorized Mean是把最 大的(1/2)N个替换成由大到小第(1/2)N 1号值 把最小的(1/2)N个替换成由小到大第(1/2)N 1 个值 然后计算的均值 它也是一种稳健的均值估计 图 28 GPA分数的 QQ图 图 29 身高的 QQ图 图 30 GPA分布直方图 图 31 左偏 右偏 轻尾 重尾的 QQ图 在 Graphs菜单中已选了直方图 盒形图 还可以作 QQ图 即分位数 分位数图 图 29为身高的正态 QQ图 其中画出了班上 19个学生的 19个点 每个点的纵坐标为变量值 而 横 SAS-Fundamental 10 坐标为该值的累计百分比频数对应的标准正态分位数 比如 身高最低的一个为 51.3 其累计 百分比频数 即 51.3的经验分布函数值 为 5.3% 即身高小于 51.3的占 5.3% 而标准正态分 布 的 0.053分 位数为-1.84570 所以此点的横坐标即-1.84570 如果身高服从正态分布 QQ图的散点应大 致在一条直线附近变动 QQ图的各种不同形状能够反映出变量分布的偏斜情况和重 轻尾情况 在 QQ图中也可以选观测 刷亮等 画出 QQ图后选主菜单中的"Curves | QQ Ref Line"可以为图中散点画一条拟和直线 图 29的身高的 QQ图显示身高基本服从正态分布 如果我们 SASUSER.GPA中 GPA分数的 QQ图 图 28 就可以看到 GPA的分布呈现左偏的情况 这是因为 在 QQ图的左下端 GPA散点的走向 比正态 图中直线 偏下 说明 GPA分布的左尾比正态长 在 QQ图的右上端 GPA散点的走向 比 正态偏右下 说明 GPA分布的右尾比正态短 即分布左偏 作为验证 可以看一看图 30的直 方 图 图 32 参数密度估计设定 图 31给出了与正态相比左偏 右偏 轻尾 重尾的分布的 QQ图的典型模式 除了可以作正态分布 QQ图外 还可以作对数正态 指数分布 威布尔分布的 QQ图 对数正态 要指定参数 Sigma 威布尔分布要指定形状参数 C 图 33 叠加了正态密度估计的直方图 SAS/INSIGHT为研究一维变量分布除画直方图外还提供了两类分布密度估计 参数估计和非参 数估计 参数估计可以拟和正态 对数正态 指数 威布尔分布密度 非参数估计使用核估计 比如 为了估计身高的正态密度并把密度曲线叠加在直方图上 选"Curves | Parametric D ensity" 弹出对话框图 32 指定正态分布且方法为用样本估计分布密度参数 按 OK后作出的 图见图 33 图 34 分布密度估计的参数表 部分 为了作身高密度的核估计图 选"Curves | Kernel Density" 弹出一个对话框 可以选三种 核函数 正态核 三角核 二次函数核 可以自动拟和最优的密度估计 方法为 AMISE 或者 自己指定平滑参数 C 见图 33 图 35 经验分布函数及 95%置信限 作了密度曲线图后在图形下面将出现显示密度估计主要参数的表格 见图 34 单击其中的曲线标志可以加亮显示图中的曲线 对参数密度估计 给出了估计的参数 比如正态的均值 方差 对核估计 给出了核函数类型 及平滑参数值 有些参数旁边有一个 滑块 可以手工选择参数的值 比如拖动核估计中的平滑参数 此参数变小时估计的曲线变粗 糙 变大时 曲线变光滑 在"Curves"菜单中还提供了对样本经验分布函数的估计 选"Curves | Empirical CDF"即绘 SAS-Fundamental 11 制样本经验分布函数 选"Curves | CDF Confidence Band"并选一个置信限可以在经验分布函 数两边画分布函数的置信限 见图 35 用经验分布函数估计分布函数相当于用直方图估计分布密度 分布函数也可以用参数分布函 数 如正态分布 来估计 选"Curves | Parametric CDF"并选分布类型可以画出估计的分布 函数 图 35中的光滑曲线即用正态分布估计身高的分布函数 图 36 分布的检验 SAS/INSIGHT还可以进行分布检验 可以检验数据是否来自某一类分布 参数未知 或检验 数据是否来自某一特定分布 参数已知 选"Analyze | Test for Distribution" 并选择 是检验正态 对数正态 指数 威布尔分布中哪一个 选正态后 得到图 36的结果 它给出了分布类型 估计的分布均值 标准差 及 Kolmogorov D统计量的值 并 给出了检验 H0 样本来自正态分布的检验 p值 Prob > D 为>.15 说明检验结果不显著 不 能否定正态假设 图 37 检验是否标准正态分布 如果要检验数据是否来自某一特定分布 选"Curves | Test for a Specific Distribution " 并指定分布类型 分布参数 可以计算检验的 Kolmogorov D统计量及相应 p值 图 37是 检 验身高是否标准正态分布的结果 可以看出 p值为 0.0001高度显著 应该否定数据来自标准正 态的假设 说明 在 SAS中 统计假设检验的结果一般用检验的 p值给出 这与我们习惯的做法稍有不同 以单正态总体的均值检验为例 假设我们要检验 SASUSER.CLASS中学生的身高是否均值为零 这当然不可能 我们为简单起见用这种假设 设总体服从 要检验的零假设为 水平 0.05 统计量使用 t统计量 一般我们用的假设检验方法定否定域为 W={|t|>C} 其中 C为 n-1自由度 t分布的双侧 0.05 分 位数 Pr{|t|>C}=0.05 当用样本算出的 t统计量的值 如 t=A 落入否定域时 |A|>C 否 定零假设 在 SAS中不需要这样指定否定域 它可以先用样本计算出 t统计量的值 A 如果 这个 A绝对值 很大就否定零假设 t统计量绝对值值是不是很大可以用这样一个 p=Pr{|t|>|A|}来衡量 p是 一个 0到 1之间的数值 显然|A|越大 p越小 p<0.05与|A|>C是等价的 所以 如果 p小于 0.0 5 就否定零假设 称检验结果是显著的 否则不否定零假设 对 SASUSER.CLASS中 HEIGHT变 量 在其分布 窗口中选菜单"Tables | Location Tests"并从弹出的对换框中选中 t检验 要检验的均值为 0 得到的结果见图 38 计算得到的 t统计量值为 A 52.9971 p值为 Pr{|t|>52.9971}小于 等 于 0.0001 因 p值小于 0.05所以结果是否定零假设 结论是身高均值不为零 SAS/INSIGHT还提供了曲线拟和 回归 logistic回归 Poisson回归 相关分析 主成分分 析等高等统计功能 我们在后面再陆续介绍 图 38 身高均值为 0的 t检验结果 SAS-Fundamental 12 练习 1. 启动 SAS 认识界面 用 F5 F6 F7切换三个窗口 2. 输入 1.1.3的例子 在运行记录窗口查看有无错误 有错时回到程序窗口用 F4调回程序修 改 3. 打开 Libraries窗口查看各数据库的内容列表 4. 启动 SAS/INSIGHT 打开 SASUSER.GPA数据集 作各变量的直方图 查看其分布情况并简答 把 GPA数据集按性别排序 同性别内按 GPA分数由大到小排序 5. 用数据窗口输入 C9501数据集 6. 研究 GPA分数的分布 说明极端值情况 在纸上画出 GPA的盒形图 并说明如何解释 通过 直方图 盒形图 各统计量 分布检验结果简述 GPA分布的特点 7. 给男女生观测指定不同颜色 画 GPA对 HSM的散点图 画各数值型变量的散点图矩阵 画 H SM HSS HSE的三维散点图 简述各变量间的直观的相互关系 SAS-Fundamental 13 第第第第 2章章章章 SAS语言与数据管理语言与数据管理语言与数据管理语言与数据管理 SAS系统强大的数据管理能力 计算能力 分析能力依赖于作为其基础的 SAS语言 SAS语言是 一个专用的数据管理与分析语言 它的数据管理功能类似于数据库语言 如 FoxPro 但又添 加了一般高级程序语言的许多成分 如分支 循环 数组 以及专用于数据管理 统计 计算的函 数 SAS系统的数据管理 报表 图形 统计分析等功能都可以用 SAS语言程序来调用 只要 指定要完成的任务就可以由 SAS系统按照预先设计好的程序去进行 所以 SAS语言和 FoxPro等 一 样是一种第四代语言 本章简单介绍 SAS语言的基本成分与规则 SAS语言如何用来管理数据 SAS语言作为一个统计 计算语言的用法 以及 SAS过程使用的初步知识 2.1 SAS语言构成 2.1.1 SAS语句 SAS语言程序由数据步和过程步组成 数据步用来生成数据集 计算 整理数据 过程步用来 对数据进行分析 报告 SAS语言的基本单位是语句 每个 SAS语句一般由一个关键字 如 DAT A PROC INPUT CARDS BY 开头 包含 SAS名字 特殊字符 运算符等 以分号结束 SAS关键字是用于 SAS语句开头的特殊单词 SAS语句除了赋值 累加 注释 空语句以外都以 关键字开头 SAS名字在 SAS程序中标识各种 SAS成分 如变量 数据集 数据库 等等 SAS 名 字由 1 到 8个字母 数字 下划线组成 第一个字符必须是字母或下划线 SAS关键字和 SAS 名字 都不分大 小写 2.1.2 SAS表达式 SAS数据步程序中的计算用表达式完成 表达式把常量 变量 函数调用用运算符 括号连接 起来得到一个计算结果 SAS常量主要有数值型 字符型两种 并且还提供了用于表达日期 时间的数据类型 例如 l 数值型 12 7.5 2.5E 10 l 字符型 'Beijing' "Li Ming" "李明" l 日期型 '13JUL1998'd l 时间型 '14:20't l 日期时间型 '13JUL1998:14:20:32'dt 数值型常数可以用整数 定点实数 科学计数法实数表示 字符型常数为两边用单撇号或两 边用双撇号包围的若干字符 日期型常数是在表示日期的字符串后加一个字母 d 大小写均可 中间没有空格 时间型常数是在表示时间的字符串后加一个字母 t 日期时间型常数在表 示日期时间的 字符串后加字母 dt 因为 SAS是一种数据处理语言 而实际数据中经常会遇到缺失值 比如没有观测到数 值 被访问人不肯回答 等等 SAS中用一个单独的小数点来表示缺失值常量 SAS变量的基本类型有两种 数值型和字符型 日期 时间等变量存为数值型 SAS的数值型 SAS-Fundamental 14 变量可以存储任意整数 定点实数 浮点实数 一般不关心其区别 数值型变量在数据集中的 存贮一般使用 8个字节 SAS的字符型变量缺省的长度是 8个字符 但是如果在 INPUT语句中 输入 字符型变量 时指定了长度则不受此限制 可以用 LENGTH语句直接指定变量长度 LENGTH语句一般应出现 在变量定义之前 格式为 LENGTH 变量名 $ 长度; 例如 LENGTH name $ 20; SAS运算符包括算术 比较 逻辑等运算符 算术运算符为 * / ** 运算优先级按通常的优先规则 比较运算符用于比较常量 变量的值大小 相等 包括 ^ > < > < IN EQ NE GT LT GE LE 其中 EQ等名字和 等特殊字符是同一运算符的等价写法 比较运算符得到"真"或"假"的结果 主要用于需要条件的分支 循环等语句中 运算符 IN是一个 SAS特有的比较运算符 用来检 查某个变量的取值是否在一个给定列表中 比如 prov in ('Beijing', 'Tianjin', 'Shanghai', 'Chongqing') 可以判断变量 prov的取值是否为四个直辖市之一 逻肌 ? OTHERWISE 语句; END; 这种 SELECT语句没有选择表达式 而是在每一个 WHEN语句指定一个条件 逻辑表达式 执 行第一个满足条件的 WHEN后的语句 如果所有条件都不满足则执行 OTHERWISE后的语句 例如 SELECT; WHEN(age<=12) put '少年'; WHEN(age<35) put '青年'; OTHERWISE put '中老年'; END; 注意上例中第二个 WHEN语句的条件等价于 age>12 and age<35 因为如果年龄小于等于 12 的话则会执行第一个 WHEN语句 然后退出 SELECT结构 根本不会判断第二个条件 这与其它 语 言中的 IF ELSEIF ELSE结构的用法是一致的 2.2.4 循环结构 SAS数据步可以使用丰富的循环结构 主要的是两种 计数 DO循环和当型 直到型循环 计数 DO循环的写法是 DO 计数变? 起始值 TO 结束值 BY 步长; 循环体语句 END; 在 DO和 END之间可以有多个语句 程序先把计数变量赋值为起始值 如果此值小于等于结束值 则执行循环体语句 然后把计数变量加上步长 再判断它是否小于等于结束值 如果是则继续 执行循环体 直到计数变量的值大于结束值为止 上述结构中"BY SAS-Fundamental 15 步长"可以省略 这时步长为 1 如果步长取负值 则继续循环的条件是计数变量大于等于结 束值 例如 data; DO i = 1 TO 20 BY 2; j = i**3; put i 3. j 5.; END; run; 可以输出一个 1 3 5 7 19的立方表 在循环体中可以用 LEAVE语句跳出循环 相当于 C语言的 break语句 例如在上例中 的 循环体最后加上这样一句可以在立方大于 1000时停止循环 if j>1000 then LEAVE; 在循环体内用 CONTINUE语句可以立即结束本轮循环并转入下一轮循环的判断与执行 比如 data; do x=0 to 3.1415926 by 0.01; y = sin(x); if y<0 then CONTINUE; z = cos(x); put x 5.2 y 10.7 z 10.7; end; run; 这个程序对 0到 之间的数每隔 0.01计算正弦值 如果正弦值为负则考虑下一个值 正弦值非 负时计算余弦值并显示 当型循环的语法是 DO WHILE(循环继续条件); 循环体语句 END; 程序先判断循环继续条件是否成立 成立时执行循环体语句 再判断循环继续条件 如此重 复 直到循环继续条件不再成立 例如 下面的程序判断 1333333是不是素数 data; x=1333333; i=3; DO WHILE (mod(x,i) ^= 0); i=i+2; END; if i=5); n+1; put n=; end; run; 可以依次输出 n=1 2 3 4 5
/
本文档为【SAS基本教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索