SAS系统和数据分析用在DATA步的控制语句.doc_第1页
SAS系统和数据分析用在DATA步的控制语句.doc_第2页
SAS系统和数据分析用在DATA步的控制语句.doc_第3页
SAS系统和数据分析用在DATA步的控制语句.doc_第4页
SAS系统和数据分析用在DATA步的控制语句.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 1 of 21 第十五课第十五课 用在用在 DATA 步的控制语句步的控制语句 DATA 步的基本概念 流程和有关文件的操作语句我们前面已介绍 但我们所介绍的 DATA 步中的 SAS 语句都是按语句出现的次序对每一个观测进行处理 有时需要对一些确 定的观测跳过一些 SAS 处理语句 或者改变 SAS 语句的处理次序 就需要用到 DATA 步中 的控制语句 实现 SAS 程序的分支 转移和循环等改变处理次序的功能 SAS 系统提供的控制语句从实现功能的角度看主要有以下五大类 实现循环 实现循环 DO 语句 语句 实现选择 实现选择 SELECT 语句 语句 实现分支 实现分支 IF 语句 语句 实现转移 实现转移 GOTO 语句 语句 实现连接 实现连接 LINK 语句 语句 一一 实实现现循循环环 DO 语语句句 循环程序中使用 DO 语句的主要形式有四种 如下所示 DO 语句的程序格式之一 语句的程序格式之一 IF条件表达式 THEN DO 一些 SAS 语句 END DO 语句的程序格式之二 语句的程序格式之二 DO 变量 开始值 TO 终值 BY 步长值 一些 SAS 语句 END DO 语句的程序格式之三 语句的程序格式之三 DO WHILE 条件表达式 一些 SAS 语句 END DO 语句的程序格式之四 语句的程序格式之四 DO UNTIL 条件表达式 一些 SAS 语句 END b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 2 of 21 DO WHILE 和 DO UNTIL 语句中的表达式是用括号括起来的 两种循环程序格式的区 别是 对条件表达式的判断位置 DO WHILE 是在循环体的开头 而 DO UNTIL 是在循环 体的结束 也就是说 DO UNTIL 至少执行循环体中一些 SAS 语句一次 下面我们举例来说明 DO 语句的使用 1 使用循环使用循环 DO 组产生随机数数据集组产生随机数数据集 例如 我们需要产生一组均匀分布的随机数流的数据集 程序如下 Data DoRanuni seed 20000101 Do I 1 to 10 by 2 X1 ranuni seed X2 ranuni seed Output End Proc print data DoRanuni Run 程序中的 X1 和 X2 都采用相同种子变量值 SEED 20000101 来产生的均匀分布的随机数 流 在数据步 DATA 中使用 DO 循环语句时常常与 OUTPUT 语句配合来产生数据集 OUTPUT 语句作用是把当前的观测输出到正在被创建的数据集 DoRanuni 中 第一次顺序执 行产生 Seed I X1 X2 四个变量 OUTPUT 输出后 遇到 END 语句回到 DO 语句 产生 I X1 X2 变量的第二次值 Seed 变量因为没有遇到 DATA 语句 继续保持原来值 DO END 循环结束后 DATA 步也就结束了 均匀分布随机数是最基本也是最重要的随机 数 其他分布的随机数都可以用均匀随机数经过变换得到 最常用的均匀分布随机函数是 RANUNI seed 这个函数是一个模为 231 1 乘子为 397204094 的素数模发生器 Seed 必须是小于模 231 1 任何数值的常数 相同的 Seed 值会产生相同的随机数序列数 但不同 次调用随机函数所产生的值通常是不同的 因此计算机所产生的随机数是一种伪随机数 这 个程序中的 X1 和 X2 都采用相同种子变量值 SEED 20000101 所产生的均匀分布的随机数流 SAS 系统提供产生了 11 种常见分布随机数的函数 如表 15 1 所示 随机数是我们实验和研 究问题的重要的输入数据 因此要能编写程序 产生符合要求分布的随机数数据集 程序运行结果如图 15 1 所示 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 3 of 21 表表 15 1 SAS 系统的各种随机函数系统的各种随机函数 随机数函数名作 用 UNIFORM seed 产生 0 1 区域均匀分布随机数 乘同余发生器 RANUNI seed 产生 0 1 区域均匀分布随机数 素数模发生器 NORMAL seed 产生标准正态分布随机数 利用中心极限定理近似公式 RANNOR seed 产生标准正态分布随机数 利用变换抽样法 RANEXP seed 产生 1 的指数分布随机数 RANGAM seed alpha 产生伽马分布随机数 alpha 0 seed 为任意数值 RANTRI seed h 产生三角分布随机数 0 h0 的整数 0 p0 seed 为任意数值 RANTBL seed p1 p2 pn 产生离散分布随机数 0 pi 1 seed 为任意数值 注 种子 seed 一般取 0 或 5 位 6 位 7 位的奇整数 对于均值为 M 标准差为 S 的正态分布随机数 可由标准正态分布随机数的线性函 数得到 X M S NORMAL seed 2 在循环在循环 DO 组中使用下标数组产生数据集组中使用下标数组产生数据集 当我们需要用同一种方法来处理很多变量时 可以用数组语句定义这组变量为数组的一 些元素 这个数组中的一些元素就可以在 DATA 步中较后面的 SAS 语句里以数组下标的形 式被引用 数组 ARRAY 语句的基本格式为 图 15 1 用循环 DO 组产生随机数数据集 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 4 of 21 Array 数组名 下标 例如 以下的几种数组定义方式都是合法的 Array x 3 T1 T2 T3 Array x 5 3 T1 T15 Array x 2 6 2 4 T1 T15 Array x 3 T1 T2 T3 100 99 98 Array x T1 T2 T3 第一种方式表示定义了一个一维名为 X 的数组 它有三个元素 对应的变量为 T1 T2 和 T3 第二种方式表示定义了一个二维名为 X 的数组 它共有 5 3 15 个元素 对应的变 量为 T1 到 T15 第三种方式与第二种方式的区别是还规定每一维下标的下界和上界 通常 不特别指明下标的下界从 1 开始 第四种方式给出了数组中相应元素的初始值 T1 100 T2 99 T3 98 第五种方式下标用星号 来代替 表示 SAS 系统通过数组中的变 量个数来确定下标 下面我们通过一个在循环中使用数组变量来产生一个新的数据集的例子 来说明循环中 使用数组变量的用法 假设要由一个老的数据集产生一个新的数据集 新的数据集要新增 n 个变量 新增变量 Ti的值与原数据集的变量 Xj值和新增变量的位置值 i 有关 为简便起见 假设新增变量 Ti Xj i 程序如下 Data DoArray Input X1 X3 Array a 4 T1 T4 Do i 1 to 4 a i X1 X2 X3 i End Card 1 2 3 4 5 6 Proc print data DoArray Run 程序运行结果如图 15 2 所示 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 5 of 21 此程序循环结构是外循环 DATA 步执行二次 因此产生二条观测 在每次外循环中 内循环 DO 重复执行四次 新增四个变量 使用 DO 语句的循环变量 i 作为数组的下标 这 种下标的使用方法是 DO 循环中处理下标数组最常用的方法 3 在循环在循环 DO 组中使用组中使用 OUTPUT 语句产生数据集语句产生数据集 如果在 DO END 内循环结束语句 END 前插入一条 OUTPUT 语句 那么每次内循环将 输出一条观测 而不是内循环所产生的所有变量值只输出在一条观测中 对于每条观测的变 量取值 要注意在 DATA 步的同一个外循环中 已经产生的变量值保持不变 内循环 OUTPUT 语句前未赋值的变量为缺失值 直到 DATA 步的下一个外循环开始时 所有用 INPUT 或赋值语句创建的变量在重复 DATA 步开始时将被设置为缺失值 我们以上面的程 序 END 语句前插入一条 OUTPUT 语句为例 程序运行结果如图 15 3 所示 图 15 2 循环 DO 组中使用数组来产生数据集 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 6 of 21 4 用循环用循环 DO 组和组和 RETAIN 语句产生数据集语句产生数据集 由已有数据集产生具有新增变量的新数据集时 通常新增变量值是本条观测原变量值和 循环变量值的函数值 但如果新增变量值是历史观测中原变量值和循环变量值的函数值时 首先考虑是将历史观测中原变量值取到中间变量 例如数组变量中 但是因为在每次重复开 始 DATA 步时 所有用 INPUT 或赋值语句创建的变量将被设置为缺失值 那该如何处理解 决呢 在 SAS 系统中有一条 RETAIN 语句专门用于解决这一问题 在数据步在数据步 DATA 中使用了中使用了 RETAIN 语句来为变量设置初值后 语句来为变量设置初值后 RETAIN 语句使得用语句使得用 INPUT 语句或赋值语句所指定的变量值从语句或赋值语句所指定的变量值从 DATA 步的这次执行到下一次重复时被保留步的这次执行到下一次重复时被保留 而 如果没有使用 RETAIN 语句 DATA 步每次重复执行之前这些变量就会被设置为缺失值 我们这里给出了 RETAIN 语句几种常用的使用格式 Retain Retain T1 T2 T3 Retain T1 T2 T3 100 Retain T1 T2 T3 100 Retain T1 T2 T3 100 99 98 第一种使用格式表示用 INPUT 语句或赋值语句创建的所有变量从 DATA 步的这次执行 到下一次重复时被保留 第二种使用格式规定了变量名字 变量列表或数组名 它们的值是 用户想保留的 第三种使用格式表示一个变量列表 T1 T2 T3 接受同一个初始值 100 第 四种使用格式是将初始值 100 用小括号括起来 SAS 系统将分配括号中的这个值给变量列表 中的第一个变量 即 T1 100 T2 和 T3 为缺失值 第五种使用格式给出了初始值列表 将 依次分配初始值列表中的值给变量列表中各个变量 即 T1 100 T2 99 T3 98 图 15 3 循环 DO 组中使用了 OUTPUT 语句 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 7 of 21 例如 我们有一组日期 DATE 和收盘价 CLOSE 股票数据 要生成一个带有 3 日移动平 均价 MOVEAVER 的数据集 所谓 3 日移动平均价 指最近 3 日收盘价的平均值 即当天 昨天和前天收盘价的平均值 昨天和前天收盘价数据要在产生时用 RETAIN 语句事先保留下 来 在计算当日移动平均价时才不至于取到缺失值 而不能计算 为了便于理解 我们将程 序编写如下 Data MAV Retain day 3 i 1 Input date date7 close Array a 4 a i close Retain If n day Then do t 0 Do i 1 to day t t a i a i a i 1 End moveaver t day i day 1 End i i 1 Card 19MAY99 12 41 20MAY99 13 65 21MAY99 15 02 24MAY99 16 52 25MAY99 18 17 Proc print data MAV Run 程序中使用了自动变量 n 它自动存放当前观测的逻辑顺序号 移动平均价的计算要 考虑初始情况 对于 3 日移动平均价来讲 第一条和第二条观测的 3 日移动平均价的数值是 不存在的 从第三条观测开始有计算数据 程序中的 IF 语句就是为了判断从第三条观测开 始计算 3 日移动平均价而设置的 第一条 RETAIN 语句的目的是设置常量 day 3 下标变量 i 的初值为 1 第二条 RETAIN 语句的主要目的是为了保留存放收盘价数据的数组 a i 我 们为了使大家明白各个变量的变化过程 RETAIN 语句后未专门指定数组 a i 而是保留用 INPUT 语句或赋值语句创建的所有变量 如果指定数组 a i 产生的数据集只有 DATE CLOSE 和 MOVEAVER 三个变量 DO END 循环的作用是用 T 累加器求最近三日 收盘价之和 T 变量每次求和前要初始化为 0 为了始终保持数组 a 1 a 2 a 3 中存 放的是最近三日的收盘价数据 用 a i a i 1 语句将刚计算过的数据前移 a 2 中数据存 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 8 of 21 放 a 1 a 3 中数据存放 a 2 a 1 中原数据正常丢弃 留空 a 3 准备读下一条记录的收 盘价 程序运行结果如图 15 4 所示 对于只有少量观测的数据集 我们还可以编写如下程序 Data MAV Keep date close moveaver Retain day 3 Input date date7 close Array a 5 a n close Retain If n day Then do t 0 Do i n day 1 to n t t a i End moveaver t day End Card 19MAY99 12 41 20MAY99 13 65 21MAY99 15 02 24MAY99 16 52 25MAY99 18 17 Proc print data MAV Run 这个程序的特点是将历史记录的收盘价全部存放到数组 a i 中 因此程序编写简单和短 图 15 4 用循环 DO 组 数组和 RETAIN 语句所产生的 MAV 数据集 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 9 of 21 小 容易理解 执行速度快 但它有一个致命的缺点 数组 a i 的大小与记录的条数相关 当实际数据的记录数很大时 将占用很大的存储空间 甚至发生内存溢出错误而不能运行 而前面程序中的数组 a i 大小只与移动平均的天数有关 相对来说是一个很小的数且是固定 的数 当然 以上的程序只是为了说明循环 DO 组和 RETAIN 语句的使用 在实际应用中 求 移动平均线最简单的方法是采用求滞后值 LAGn 函数 例如求 3 日移动平均线相应的程序如 下 Data MAV Input date date7 close Moveaver close lag1 close lag2 close 3 Card 19MAY99 12 41 20MAY99 13 65 21MAY99 15 02 24MAY99 16 52 25MAY99 18 17 Proc print data MAV Run 二二 实实现现选选择择 SELECT 语语句句 在 DATA 步中使用 SELECT 语句 使 SAS 系统去执行几条语句或语句组中的一条语句 本质上是一种多路分支结构 当然可以用 IF THEN 结构的多层嵌套来实现 但当分支较多 时 SELECT 语句会很方便 结构也很清楚 SELECT WHEN 结构非常类似其他程序语言 中的 DO CASE 结构 SELECT 语句开始一个 SELECT 组 SELECT 组包括一些 WHEN 语句 当一个设定的 条件为真时 执行对应的 WHEN 语句给出的一些 SAS 语句 在 SELECT 组中至少必须有一 个 WHEN 语句 如果所有的 WHEN 条件均不成立 那么执行 OTHERWISE 语句给出的 SAS 语句 最后用一个 END 语句结束这个 SELECT 组 SELECT 语句的一般格式如下 Select When when 表达式 任意可执行 SAS 语句 When when 表达式 任意可执行 SAS 语句 Otherwise 任意可执行 SAS 语句 End 如果有 SELECT 的表达式 首先比较 select 表达式和第一个 when 表达式计算结果的大 小 相等为真 执行这个 WHEN 后面的 SAS 语句 不相等为假 执行下一条 WHEN 语句 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 10 of 21 或 OTHERWISE 语句 如果没有 SELECT 的表达式 when 表达式中一定要含有比较操作符 先求出第一个 when 表达式的真假结果 如果为真 执行这个 WHEN 后面的 SAS 语句 如果为假 执行 下一条 WHEN 语句或 OTHERWISE 语句 要特别注意 一个 SELECT 组是按顺序判断 WHEN 语句 一旦某个 WHEN 语句满足条 件执行了 就跳出这个 SELECT 组 即使后面 WHEN 语句也满足条件 也不再执行了 所 以 程序员要注意安排好 WHEN 语句的顺序和条件 例如 我们有一个 CLASS 数据集 存放的是学生的成绩表 我们要创建一个新的数据 集 CLASS02 新增平均成绩 AVER 变量和等级考评 GRADE 变量 GRADE 的值是根据 AVER 值的大小给出 A B C D 四个等级 程序如下 Libname Study d sasdata mydir Data Class02 Set Study Class aver test1 test2 test3 3 Select When aver 90 grade A When aver 80 grade B When aver 70 grade C Otherwise grade D End Proc print data Class02 Run 程序运行结果见图 15 5 所示 图 15 5 用 SELECT WHEN 组产生的数据集结果 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 11 of 21 三三 实实现现分分支支 IF 语语句句 在 SAS 语言中 IF 语句有两种使用格式 IF 语句的格式之一 语句的格式之一 IF 条件表达式 THEN SAS 语句 IF 语句的格式之二 语句的格式之二 IF 条件表达式 当我们在创建 SAS 数据集时使用 IF 语句的格式之一 可以根据被处理的观测是否使 IF 条件表达式为真 来决定是否执行 THEN 后面的 SAS 语句 如果条件表达式为假 执行 ELSE 后面的语句 没有 ELSE 语句执行 IF 语句的下一条语句 IF THEN ELSE 语句可以多层嵌套 但要注意 IF THEN ELSE 语句的程序编写格式和 匹配 另外 THEN 和 ELSE 后还可以跟 DO 语句 格式见 DO 语句的程序格式之一 1 使用使用 IF THEN ELSE 语句语句 例如 我们有一个 SURVEY 数据集 其中有人的身高 HEIGH 和体重 WEIGHT 数据 现在我们要创建一个新的数据集 SURVEY02 新的数据集新增一个变量 FATNESS 用以标 识这个人是否肥胖 假设 人的标准体重计算公式 男性之标准体重 千克 身长 厘 米 女性之标准体重 千克 身长 厘米 如果超过标准体重的 20 就算肥胖 用 Y 来表示 否则用 N 来表示 程序如下 Libname Study d sasdata mydir Data Survey02 Set Study Survey if sex M then if weight heigh 100 100 1 2 then fatness y else fatness n else If weight heigh 100 102 1 2 then fatness y else fatness n Proc print data Survey02 Run 在使用 IF THEN ELSE 语句的多层嵌套结构时要注意两点 一是要以锯齿型来排列一 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 12 of 21 组组 IF THEN ELSE 语句 目的是为了通过程序书写格式就能明确 IF THEN ELSE 语句 的层次和配对 二是如果 THEN 和 ELSE 后的 SAS 语句不直接写在同行的后面 而是写在 下一行 THEN 和 ELSE 后不能加分号 表示本程序行并没有结束 直到遇到分号 为止 程序运行结果我们在这里就省略了 2 使用使用 IF 语句语句 当我们在创建 SAS 数据集时使用 IF 语句的格式之二 常用来创建满足 IF 条件表达式的 新数据集 例如 我们要从 SURVEY 数据集中挑选出所有男性观测来产生一个新数据集 SURVEY03 程序如下 Libname Study d sasdata mydir Data Survey03 Set Study Survey if sex M Proc print data Survey03 Run 四四 实实现现转转移移 GOTO 语语句句 GOTO 是一种无条件转移语句 它告诉 SAS 系统立即转到 GOTO 语句所指的那条语句 并从那条语句开始执行后面的语句 GOTO 语句的实现 是通过 GOTO 语句中和目标语句 前使用相同的语句标号才识别目标和实现转移的 要注意 GOTO 语句只能在同一个 DATA 步中进行转移 GOTO 语句的基本使用格式如下 Data 数据集 GOTO 语句标号 语句标号 Run GOTO 语句是一种非结构化程序设计语句 它通过语句标号可转移到任意目的地的特性 常常破坏程序的结构化 许多其他语言都不主张使用或禁止使用 当然 GOTO 语句的功能 是可以通过其他结构化控制转移语句替代实现 但是 GOTO 语句也有明显的特点 能很方 便地和灵活地进行转移 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 13 of 21 GOTO 语句最常见的使用 是出现在 IF THEN 语句中 作为 THEN 分句 例如 我 们要对当前输入的一组成绩数据 TEST 进行动态统计 计数到目前输入为止不及格 60 then GOTO ok countif countif 1 ok acctest acctest test cards 100 90 45 55 80 30 Proc print data Study Survey02 Run 程序运行结果如图 15 6 所示 程序中的 ok acctest acctest test 累加语句 如果条件不成立 执行完 countif countif 1 计数语句后 也要执行此累加语句 如果我们在 countif countif 1 计数语句后 ok acctest acctest test 累加语句前插入一条 RETURN 返回语句 RETURN 语句的作用是返 回到 DATA 步的开头处理新的输入数据 相应地程序的作用也发生了变化 不是累加全部 的成绩 而是累加及格的成绩 计数器仍然计数不及格的人数 最后的结果是 OBS 6 时 COUNTIF 3 ACCTEST 270 图 15 6 用 GOTO 语句设计的条件计数器和累加器 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 14 of 21 五五 实实现现连连接接 LINK 语语句句 LINK 连接语句的作用是立即转到由 LINK 语句指示的语句标号 并从那里开始继续执 行语句直到一个 RETURN 语句被执行 执行 RETURN 语句立即返回到 LINK 语句后面的那 个语句并从那里继续执行 与 GOTO 语句一样 LINK 语句和语句标号所在的目标语句必须 在同一个 DATA 步中 LINK 语句的基本使用格式如下 Data 数据集 LINK 语句标号 RETURN 语句标号 Run LINK RETURN 结构从程序执行的本质看 是调用子程序和子程序返回 类似于其他 程序语言中转子语句和返回语句 它们都是可以嵌套的 且都用同一 RETURN 语句返回 返回到调用语句的下一条语句 每一个子程序的 RETURN 语句能正确地返回调用点 而不 发生混乱 是通过内部的堆栈结构实现的 如果 GOTO 语句后也有 RETURN 语句 LINK 语句和 GOTO 语句之间的差别在于这个 RETURN 语句的作用 LINK 后的 RETURN 让程序返回到 LINK 后的那条语句 GOTO 后 的 RETURN 让程序返回到 DATA 步的开头 事实上 每一个 DATA 步的结束处都包含一个 隐含的 RETURN 因此 没有 LINK 和 RETURN 语句的数据步 执行到最后 DATA 结束处 是通过隐含的 RETURN 语句返回到数据步 DATA 开头 有 LINK 语句而没有 RETURN 语句 的数据步 并不会发生错误 而是执行到最后 DATA 结束处 用隐含的 RETURN 语句返回 到 LINK 后的那条语句 例如 我们已有一个学生成绩数据集 CLASS 原来的成绩分数是按百分数给出的 现 在要创建一个新的数据集 CLASS04 将百分数成绩改为四级评分 A 100 90 B 89 80 C 79 70 D 90 grade A when test 80 grade B when test 70 grade C otherwise grade D End Return Proc print data Study Class04 Run 程序运行结果如图 15 7 所示 第十六课第十六课 每次调用从标号语句 recode select 开始到 Return 语句结束的子程序前 要先给 Test 变量赋所要转换的分数值 每条观测需要调用三次这个子程序 Test 图 15 7 用 LINK 语句调用子程序来创建数据集 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 16 of 21 变量的值分别来自数据集字段变量 Test1 Test2 Test3 然后子程序根据 Test 变量的值进行分析判断运算 结果 都存放在 Grade 变量中再返回 因此 每次调用子程序结束后 应该将 Grade 变量中的结果值运用到某公式中 另外 程序中的第二个 Return 语句 也就是子 程序的返回语句在本程序中是可以省略 的 因为这个 Return 语句的再下面正好 就是 DATA 步的结束处 它也有一个隐 含的 Return 语句可供子程序返回 用在用在 PROC 步中的通用语句步中的通用语句 当我们用 DATA 步创建好 SAS 数据集后 可以用 SAS 的一些 PROC 过程步来进一步的 分析和处理它们 在 DATA 步中用户可以使用 SAS 的语句来编写自己的程序 以便能通过 读入 处理和描述数据 创建符合自己特殊要求的 SAS 数据集 而后由一组组 PROC 步组 成的程序进行后续分析和处理 一一 PROC 程程序序的的主主要要作作用用 读出已创建好的读出已创建好的 SAS 数据集数据集 用数据集中的数据计算统计量用数据集中的数据计算统计量 将统计的结果按一定形式输出将统计的结果按一定形式输出 在 SAS 系统中 计算统计量时 对于许多常用的和标准的统计计算方法 并不需要用 户自己编写这些复杂的程序 而是通过过程的名字来调用一个已经为用户编写好的程序 用 户通常只要编写调用统计过程前的准备处理程序和输出统计结果后的分析和管理程序 只有 用户自己非常特殊的统计计算方法才需要用户自己编写相应的计算程序 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 17 of 21 二二 PROC 过过程程语语句句 PROC 语句用在 PROC 步的开始 并通过过程名来规定我们所要使用的 SAS 过程 对 于更进一步的分析 用户还可以在 PROC 语句中使用一些任选项 或者附加其他语句及它们 的任选项 如 BY 语句 来对 PROC 步规定用户所需要分析的更多细节 PROC 语句的格式 为 PROC 过程名 过程名规定用户想使用的 SAS 过程的名字 例如 我们在前面常使用的打印过程名 PRINT 对数值变量计算简单描述统计量的过程名 MEANS 选项规定这个过程的一个或几个选项 不同的过程规定的选项是不同的 因此 只有知 道具体的过程才能确定具体的选项是什么 但是 在各个不同过程中使用选项时 下面三种 选项的使用格式是共同的 Keyword Keyword 数值数值 Keyword 数据集数据集 Keyword 是关键字 第一种选项格式是某个具体过程进一步要求某个关键字 第二种选 项格式是某个具体过程要求某个关键字的值 值可能是数值或字符串 第三种选项格式是某 个具体过程要求输入或输出数据集 例如 PROC Print Data class 过程 Print 作用为打印输出数据集中的数据 选项为 Data class 关键字是 Data 进一 步说明要打印输出的数据集名为 class 如果省略这个选项 将用最近产生的 SAS 数据集 PROC Plot Hpct 50 Vpct 33 过程 Plot 作用为描绘变量的散布图 现有两个表示图形大小的选项为 Hpct 50 Vpct 33 关键字 Hpct 和 Vpct 的值分别表示在水平和垂直方向上占一页中的比例 数值 50 表示占一页的 50 即全页的一半 PROC Means Data class Maxdec 3 CSS 过程 Means 作用为对数值变量计算简单描述统计量 现有三个选项为 Data class Maxdec 3 CSS 选项 Maxdec 3 表示该过程输出结果中 小数部分的最大位数为 3 选 项 CSS 是单个关键字 指出 MEANS 过程选用的计算统计量的方法 在 MEANS 过程中共 有几十种计算统计量方法 CSS 表示计算均值偏差的加权平方和 三三 用用在在 PROC 步步的的通通用用语语句句 能够出现在 PROC 步的 SAS 语句主要分成 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 18 of 21 过程信息语句 过程信息语句 变量属性语句变量属性语句 可用在任何地方的全局语句可用在任何地方的全局语句 下面我们列出语句是 PROC 过程中最常用的一些通用语句 还有很多其他语句对不同的 过程是专用的 1 VAR 语句 变量语句 语句 变量语句 VAR 语句可用在不同的 SAS 过程中 被用来给出要分析的变量 该语句的格式为 VAR 变量列表 变量列表给出过程将要分析的数据集中的一些变量 变量列表的任意有效形式都是可以 使用的 通常 VAR 语句是放在过程的开始处 另外 VAR 语句中的变量顺序 也是将来输 出结果时的变量顺序 2 MODEL 语句 模型语句 语句 模型语句 MODEL 语句可用在不同的 SAS 统计过程中 被用来规定分析的模型 尽管 MODEL 语 句的具体语句形式依赖于使用的具体过程 但 MODEL 语句的一般使用格式为 MODEL 因变量列表 自变量列表 MODEL 语句在使用时 要说明哪些变量是因变量 哪些变量是自变量 另外 不要把 号看作是等号或赋值号的作用 例如 Model y x1 x5 自变量为 x1 x2 x3 x4 x5 因变量为 y Model y1 y2 a b c d 自变量为 a b c d 因变量有两个 y1 和 y2 3 WEIGHT 语句 权数语句 语句 权数语句 WEIGHT 语句可用在不同的 SAS 过程中 用来规定一个变量 它的值是这些观测相应 的权数 该语句的格式为 WEIGHT 变量 WEIGHT 语句常常用在这样一些分析中 比如与每个观测有联系的方差不等时 那么可 引入一个权数变量 其值和方差的倒数成比例 b53d3f9ba66dca066a8b3def14514751 pdf SAS 系统和数据分析系统和数据分析 电子商务系列 上海财经大学经济信息管理系IS SHUFE Created by zxdeng Page 19 of 21 4 FREQ 语句 频数语句 语句 频数语句 FREQ 语句可用在不同的 SAS 过程中 用来规定一个变量 它的值表示这个观测出现的 频数 该语句的格式为 FREQ 变量 如果在某个观测中 FREQ 变量的值小于 1 这个观测在分析中不使用 如果 FREQ 变 量的值不是整数 仅取整数部分使用 注意 FREQ 语句和 WEIGHT 语句的区别 FREQ 变 量表示观测出现的次数 WEIGHT 变量给出观测相应的权数 当每个观测的权数都是整数时 WEIGHT 语句也可用 FREQ 语句代替 5 ID 语句语句 ID 语句可用在不同的 SAS 过程中 用来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论