Peking University SAS Club 2006年10月
整体计划 一、SAS与数据分析基本概念 二、SAS编程语言入门 三、SAS数据整理 四、SAS统计分析 五、专题与项目实践
二、SAS编程语言入门
SAS编程语言入门2 上次内容回顾 常用的SAS语句 4 SAS函数 5 实例与练习 6
To teach is equal to learn twice ! 0.上次内容回顾 To teach is equal to learn twice !
4. 常用的SAS语句 赋值语句 输出语句 分支语句 循环语句
A. 赋值语句 SAS中用赋值语句计算一个值并存放在变量中。格式为: 变量名=表达式 例: avg = (math + chinese/120*100)/2; isfem = (sex=’F’); y=sin(x)**2; newv = .;
B. 输出语句 在DATA步中,PUT语句可以把内容输出到LOG窗口,其格式为: PUT variable [$]; 2。每一项为变量名或字符串,不能是数值常量或数值表达式,各项用空格分开 3。输出结果显示在日志窗口
B. 输出语句 更多用法: 例: Data a; Put x= y=; x=0.5; Put x 10-20 .6 y 30-40 .6; Put ‘sin(‘ x ‘)=‘ y $6; 例: Data a; x=0.5; y=sin(x); put ‘sin(‘ x ‘)=‘ y; run;
C. 分支语句 分支语句即条件语句:需要在满足某些条件下,执行相应的操作 1.条件IF语句的格式: IF expression THEN statement; [ ELSE statement; ] 例: if y>0 then put ’ Y为正数’
C. 分支语句 当执行相应的操作不只一个,需要多个语句时,怎么办? Do 语句格式: IF expression THEN Do; statement1; statement2; 。。。。 statementn; End; [ ELSE Do;statement1; 。。。。End;]
例: if y>0 then Do; put ’ Y为正数’; Y=Y**2; Put y=; End; Else y=-y; C. 分支语句 例: if y>0 then Do; put ’ Y为正数’; Y=Y**2; Put y=; End; Else y=-y;
C. 分支语句 2.多分支结构SELECT语句 格式1: SELECT (expression); WHEN (Value1,Value2,….Valuek) statement; WHEN (Value1,Value2,….Valuej) statement; …… OTHERWISE statement; END;
例: C. 分支语句 SELECT(month); WHEN('Feb', 'Mar', 'Apr') put '春天'; WHEN('May', 'Jun', 'Jul') put '夏天'; WHEN(‘Aug’, ‘Sep’, ‘Oct’) put ‘秋天'; OTHERWISE put '冬天'; END;
C. 分支语句 2.多分支结构SELECT语句 格式2: SELECT; WHEN (expression1) statement1; …… OTHERWISE statement; END;
例: SELECT; WHEN(age<=16) put '少年'; WHEN(age<35) put '青年'; OTHERWISE put '中老年'; END;
SAS数据步(DATA STEP)可以使用3种循环结构: 循环Do语句 Do While 语句 Do Until 语句
D. 循环语句 1.循环Do语句: 语句格式: statement1; statement2; 。。。。 statementn; DO 循环变量= 初值 TO 终值 by 增量; statement1; statement2; 。。。。 statementn; END; 循环执行的SAS语句
C. 分支语句 例: Data b; DO i = 1 TO 20 BY 2; j = i**3; put i j; Ouput: END; run;
C. 分支语句 跳出循环:LEAVE 相当与C语言的Break 例: if j>1000 then LEAVE;
D. 循环语句 2. Do While语句: 语句格式: statement1; statement2; 。。。。 statementn; DO While(Expression) ; statement1; statement2; 。。。。 statementn; END; 循环执行的SAS语句
例: C. 分支语句 Data C; x=1333333; i=3; DO WHILE (mod(x,i) ^= 0); i=i+1; END; if i<x then put x ’不是素数’; else put x ’是素数’; run;
D. 循环语句 3. Do Until语句: 语句格式: statement1; statement2; 。。。。 statementn; DO Until(Expression) ; statement1; statement2; 。。。。 statementn; END; 循环执行的SAS语句
C. 分支语句 例: data; n=0; do until (n>=5); n=n+1; put n=; end; run;
D. 循环语句 关于循环的一个比较灵活的写法: Data ; do i=3, 7, 11 to 17 by 3 while (i**2<200); j=i**2; put i j; end; run;
5. SAS函数 SAS函数的定义 SAS函数的参数和结果 函数的分类与常用函数介绍
A. SAS函数的定义 例: Function Name(argument,...) SAS函数是一个子程序,它由0个或几个自变量返回一个结果值。每个SAS函数都有一个关键词名字。为了引用函数,要写出它的名字,然后写出一个自变量或几个自变量,它们用括号括起来,这个函数对这些自变量执行某种运算。SAS函数的形式为: Function Name(argument,...) 例: MEAN(x,y,z,a) SUM(x,y,z) MIN(SUM(x,y,z),1000)
B. SAS函数的参数和结果 1. SAS函数的参数 1) 参数的类型:参数可以是简单的变量名、常数或者表达式。这个表达式还可以包含其它的函数。例如: max(cash,credit) sqrt(2500) min(sum(of x1-x10),y) 2) 参数的个数:有些函数不需要参数(如DATE()),有些只需要一个参数,有些函数是对几个参数作分析处理。如果函数的参数是表达式,则先计算作为参数的表达式 例如:LOG(x+y)这个函数,是先计算x+y,然后调用对数函数LOG来计算x+y的对数
B. SAS函数的参数和结果 3) 参数的表示法: 一般地,当函数有几个参数时,它们之间必须用逗号(,)分隔开。不过,以下三种写法均是合法的: Function Name(OF variable1-variablen) Function Name(OF variable variable ...) Function Name(variable, variable, ...) 例如: sum(of x1-x5) sum(of x1 x2 x3 x4 x5) sum(x1,x2,x3,x4,x5) 是等价的。
B. SAS函数的参数和结果 2. 函数的结果: 函数的取值通常取决于参数的类型,当参数是字符型变量时,函数的取值为字符;当参数为数值型变量时,函数的取值为数值。
C. 函数的分类与常用函数介绍 SAS函数主要分为以下几类: 数学函数 三角函数 概率分布函数 样本统计函数 字符串函数 时间日期函数 随机数函数
C. 函数的分类与常用函数介绍 数学函数 abs():求绝对值 mod(var1,var2):求var1除以var2后的余数 sqrt():求平方根值 int():取整函数,截取小数部分 round(var,规定):按规定四舍五入。规定取:0.1,0.01,…… log():计算以e为底的对数值
C. 函数的分类与常用函数介绍 样本统计函数 max():求最大值 min():求最小值 mean():求均数 std():求标准差 sum():求和 随机函数 normal() ,rannor():产生一个标准正态分布随机数 字符函数 substr():从一个字符串中抽取或取代一个指定的子串 trim():去掉字符串尾部的空格
C. 函数的分类与常用函数介绍 7、日期时间函数 year():从变量中抽取“年份”值 month():从变量中抽取“月份”值 day():返回变量的天数值 mdy(月,日,年):将变量转换成日期值形式 如何查找所需要的函数: SAS 在线帮助和文档
实例与练习
Z=SinX+Y2 1.output语句 2.Keep 语句 3.g3d 过程 用SAS生成曲面图 data surface; Incre=0.1; do x=-5 to 5 by Incre; do y=-5 to 5 by Incre; z=sin(X)+Y*Y; output; end; keep x y z; run; proc g3d data=surface; plot x*y=z; Z=SinX+Y2 1.output语句 2.Keep 语句 3.g3d 过程
练习 用SAS画二元正态分布图