第二章 SAS编程基础 Basic Programming of SAS 主讲人:李桥
主要内容 SAS数据集、常量、变量与观测 SAS函数 SAS操作符 数据步流程
SAS数据集、常量、变量与观测 数据集(Dataset) SAS数据集是SAS可以管理的结构化的数据,只有SAS 数据集中的数据才能被SAS过程步处理。 数据集包含两部分内容: 1. 描述部分: (数据结构) 数据名称、类型、长度、格式等。 2. 数据部分: (数据) 包含实际数据值。 SAS数据值被安排在一个矩阵式的表状结构中。
观测(Observation) 变量(Variable) 描述被观测对象的单一整体(如一个人、一个实验动物等)某些所研究特性的一系列数据值称为一个观测,又称观察。在SAS数据集中每一行数据是一个观测。 变量(Variable) 变量指定了数据的某一特性。在SAS数据集中,每一个观测是由各个变量的数据值组成。在数据集中每一列数据是一个变量。
变量的命名 变量名最多8个字符长,一般由字母、数字、下划线组成。第一个字符必须是字母或者下划线,不能有空格。特殊字符(如$,@,#)也不允许在SAS名中使用。 合法变量名如: A A1 abc name age total … SAS系统保留的特殊变量名,以下划线开始和结尾。如:_N_和_ERROR_等。
变量特性:名称、类型、长度、输入格式、输出格式和标记。 两种类型:数值型 字符型(后跟“$”符号) 长度特性:是指存贮的字节数。缺省长度是8 (为了存贮长度与缺省值不同的变量,需使用LENGTH语句)。
定义变量特性的两种方法: 例如: DATA A; C='BAD'; PUT C; C='GOOD'; RUN; 明确地说明 – input 语句 在首次出现时给出定义 – 赋值语句:等号 = 例如: DATA A; C='BAD'; PUT C; C='GOOD'; RUN;
变量清单的简化表示 如果要一次定义或指定多个同种类型变量,可以使用缩写变量清单形式: (P13表2-1) INPUT NAME $ VAR1 VAR2 VAR3 VAR4 VAR5 VAR6; 可以写成: INPUT NAME $ VAR1-VAR6; 注意: 字符型变量NAME不包含在这个缩写清单中。 这些变量要求类型相同,或全是数值型的或全是字符型的。
缺项值 当一个变量由于某种原因没有得到(可能没有观测到,或由于数据错误,或由于计算错误),称该值为缺项值(又称缺失值)。在SAS中用“.”表示。
常量 (Constant) SAS常量为其值是固定不变的量。 SAS常量经常用于赋值、运算等语句中。 如:y = 10; c = “张”; 常量分为以下三类: 数值常量:1.5 -2.79 1.75E-5 字符常量:“Hello” “ABC” ‘Zhangli’ 日期、时间、日期时间常量:后接D,T,DT ‘1JAN2000’D ‘9:25:19’T ‘1JAN2000:10:30:05’DT
SAS函数 函数是一个功能模块,包括三个要素: 函数的作用为:根据参数计算函数值并返回。 例:y = SUM ( 1, 2, 3) ; 函数名、参数、返回值 函数的作用为:根据参数计算函数值并返回。 例:y = SUM ( 1, 2, 3) ; 函数名:SUM 参数:1, 2, 3 返回值:6 (函数运算结果) 参数格式: 1. 用逗号分割:SUM(x1, x2, x3) 2. 用简化形式:SUM(OF x1-x3) 3. 用列表形式:SUM(OF x1 x2 x3)
SAS操作符(运算符) 算术操作符 比较操作符 逻辑操作符 ** * / + - = > >= < <= ^= ** * / + - 比较操作符 = > >= < <= ^= 逻辑操作符 & (AND) | (OR) ^ (NOT)
算术操作符 ** * / + - 作用:进行数学运算,得到数值结果。 例: y = x ** 2 + b; C = (12 – 4) * 2;
比较操作符 = > >= < <= ^= 作用:比较二值的大小,如成立,结果为 逻辑真值 1;如不成立,结果为 假值 0。 例:y = 3 > 2; (结果 y 值为 1) x = “ABC” > “ABD”; (结果x值为 0)
逻辑操作符 & (AND) | (OR) ^ (NOT) 作用:进行逻辑运算,结果仍为逻辑值 真(1),假(0)
SAS表达式 用操作符将常量、变量、函数等连接起来进行运算,最终会产生一个值(表达式的值)。 运算优先级:算术 > 比较 > 逻辑 例: X+1 3 LOG(Y) PART/ALL*100 1-EXP(N/(N-1)) AGE<100 STATE='NC'丨 STATE='SC'
数据步流程 数据步由 DATA 语句开始,对输入数据中的每一观测,都执行数据步一遍,当执行到数据步的最后一条程序语句(一般是Cards语句)时,将变量的当前值写入数据集中。然后SAS程序再回到数据步的第一条语句继续执行,读取下一个观测。就这样不断循环读取观测,从而建立起完整的数据集。 一般来说,数据中有几行数据,则数据步执行几遍,建立的数据集中则有几个观测。
INPUT NUM SEX $ AGE WEIGHT HEIGHT; RATIO=WEIGHT/HEIGHT; CARDS; 例: DATA FITNESS; INPUT NUM SEX $ AGE WEIGHT HEIGHT; RATIO=WEIGHT/HEIGHT; CARDS; 1001 F 19 47 1.69 1002 M 20 55 1.74 1003 F 18 49 1.66 ; RUN; Num Sex Age Weight Height Ratio 1001 F 19 47 1.69 27.8107 1002 M 20 55 1.74 31.6092 1003 F 18 49 1.66 29.5181