SAS编程基础.doc
第2章 SAS编程基础

最常见,系统按照语句自身顺序进行解释执行。 如: data file1;
input mane$ 1-8 age sex$ height weight ; cards ; Zhang ji 28 m 1.75 60 Li ming 27 f 1.72 58 Wang jie 31 f 1.80 65 ; PROC print ; Run ;
19:02 25
SAS程序中的运算与表达
SAS表达式
用操作符将常量、变量、函数等连接起来进行运算, 最终会产生一个值(表达式的值)。
运算优先级:算术 > 比较 > 逻辑
19:02
26
sas程序的基本结构14sas系统中的常见过程sas程序的基本结构过程名作用输出结果print显示数据集的变量名及变量值变量变量值sort对指定变量进行排序对指定变量进行升降序排列means对数值型变量进行描述性统计分析均值标准差极值等univariate对数值型变量进行描述性统计分析常见统计量t检验分位数极端值freq对定序变量进行描述性统计分析累计频数频率等chart对指定变量绘制文本形式的图形饼图直方图星形图gchart在graph窗口中对指定变量绘图饼图直方图星形图15e程序program由sas语句组成的集合称sas程序
例如:计算1~100之间所有奇数之和。
编程如下: 结果如下:
20
SAS程序的结构化编程语句
2)当循环:
语法: do while (继续循环条件表达式) ; …; end;
例如:计算1~100之间所有偶数之和。 编程:
结果:
21
SAS程序的结构化编程语句
3)直到循环:
语法: do until (退出循环条件表达式) ; …; end;
02SAS编程基础

*
乘
A*B*3
/ +
除 加
X/A 5+C
-
减
C-A
输出结果: X=22.917651494 Y=9.3333333333 Y=.
比较算符
比较算符应用。 例2.9 比较算符应用。 if x<y then c=5; else c=12;
算符 ** * / + -
含义 乘方 乘 除 加 减
举例 A**2.5=A2.5 A*B*3 X/A 5+C C-A
第2章 SAS编程基础 章 编程基础
清华大学经管学院 朱世武 Zhushw@ Resdat样本数据: 样本数据: 样本数据 SAS论坛: 论坛: 论坛
SAS语言元素 语言元素
主要的SAS语言元素包括: 语言元素包括: 主要的 语言元素包括 数据集选项; 数据集选项; 输出和输入格式; 输出和输入格式; 函数和CALL子程序; 子程序; 函数和 子程序 应用响应测量宏; 应用响应测量宏; 语句; 语句; SAS系统选项; 系统选项; 系统选项 表达式。 表达式。 表达式部分内容很多,后面章节有专门介绍。 表达式部分内容很多,后面章节有专门介绍。
例2.11 连接带空格的字符值。 data; X=’GOOD ’; Y=’MORNING’; Z=X||Y; put Z=; run; 结果显示为 Z=GOOD MORNING NOTE: 数据集 WORK.DATA1 有 1 个观测和 3 个变量。
SAS变量 变量
SAS变量分为数值变量和字符变量。 数值变量 数值变量是SAS系统以浮点(floating-point)方式存储的数 据变量,数值变量包括日期和时间。 数值变量的值只能是数值。 字符变量 字符变量可以由阿拉伯字母、数字0-9以及其它一些特殊字 符组成。 字符变量的值可以是字符、字母、特殊字符和数值。字符变 量名后跟一个美元号($)表示该变量是字符型而不是数值 型。
SAS编程语言基础

卫生统计教研室 彭斌
Slide 1
从原始数据到最终报告
卫生统计教研室 彭斌
Slide 2
§1、 SAS语句
SAS编程语言同其它计算机语言一样,也有自己的语法: 关键词和连结关键词与其它辅助信息的规则。
由SAS语句组成的序列称为SAS程序。
一.SAS语句的含义 我们先来看一个实例:
现在,我们给出SAS语句的定义:SAS语句是由关键词、 SAS名、特殊字符或运算符组成并以分号结尾的字符串。
卫生统计教研室 彭斌
Slide 6
二.几个概念 1.SAS关键词
位于句首的用以说明语句类型和功能的单词称为SAS语句的关键 词。它是SAS语句的主要成份。如:PROC、DATA、VAR、RUN等。 2.SAS名
68 71 65 良好 74 61 68 良好 73 75 46 良好 79 80 79 优秀 75 71 68 良好 85 85 87 优秀 78 79 75 优秀 80 76 79 优秀 85 80 82 良好 77 71 75 良好 67 73 71 优秀 75 81 70 良好 70 54 75 及格 70 66 84 及格 62 73 65 及格 82 70 79 优秀
(更多其它语句)
CARDS语句:用来指示数据行的开始;
数据行
;语句:表示数据行的结束。 RUN;
卫生统计教研室 彭斌 Slide 11
DATA关键词告诉系 统,要创建一个SAS 数据集,命名为score
INPUT关键词告诉系 统,数据在程序流中, 并且指明数据所对应 的变量名及类型。$符 号说明它前面的一个 变量为字符型。
x3 16 73.0000000 9.7911525 46.0000000 87.0000000
SAS编程基础..

TANGJIE
2 35 169.2 60.8
GAOJUN
2 24 176.0 73.3
SUNHONG 2 27 158.3 49.9
;
PROC MEANS;
CLASS SEX;
VAR HEIGHT WEIGHT;
RUN;
❖ DATA STEP(数据步)
以DATA语句开始 将数据读入SAS系统,建立SAS数据集
INPUT NAME $ V1 V2 V3 V4 V5 V6;
可以写成:
INPUT NAME $ V1-V6;
注意: 字符型变量NAME不包含在这个缩写清单中。 这些变量要求类型相同,或全是数值型的或全是字 符型的。
v1 1-2 v2 3-4 v3 5-6 可表示为(v1-v3)(3*2.) 或(v1-v3)(2.2.2.) 表示共有三个变量,每个变量有两位数据
观测(Observation,OBS)
描述被观测对象的单一整体(如一个人、 一个实验动物等)某些所研究特性的一系列数 据值称为一个观测,又称观察。在SAS数据集 中每一行数据是一个观测。
变量(Variable)
变量指定了数据的某一特性。在SAS数据 集中,每一个观测是由各个变量的数据值组成。 在数据集中每一列数据是一个变量。
三、SAS语句
SAS语句是由SAS关键词<操作数><选择项> 组成,以分号(;)结束 1、语句格式:关键词<操作数><选择项> 例: data one two (keep=x);
2、SAS语句的类型 可执行语句(X)例:PUT,IF,BY等 定位语句(P)例:DATA等 说明语句(D)例:LABEL等
回到程序编辑窗口,修改源程序,再执行 如果程序编辑窗口没有显示刚刚执行的程序,
SAS编程基础

data sy2_9_0; set mylib.sy2_2; if (zc = '工人');
run;
(2) 建立两个数据集:
data sy2_9_1; set sy2_9_0; keep bh xm jbgz;
run; data sy2_9_2;
set sy2_9_0; keep bh sfgz; run;
jbgz='基本工资' glgz='工龄工资' jj='奖金' kk='扣款' sfgz='实发工资';
cards;
3003 王以平 男 1992-8-1 助工
生产
620 300 500 0 1420
3004 林红
女 1993-8-1 助工
供销
620 280 500 200 1200
3005 吕兴良 男 1982-1-30 工程师 技术
代码如下:
data sy2_5; set mylib.sy2_2; drop gzrq; if jbgz < 600 then jbgz = 600;
run;
2. 增加新变量
【实验 2-6】在 mylib.sy2_2 中增加变量 yfgz(应发工资=基本工资+工龄工资+奖金)、生 成新的数据集 work.sy2_6。
data sy2_7_1 sy2_7_2;
4
SAS 软件与统计应用实验
set mylib.sy2_2; select;
when (jbgz<600) output sy2_7_1; when (jbgz>=600) out据集的纵向合并
第二章[SAS编程基础]
![第二章[SAS编程基础]](https://img.taocdn.com/s3/m/65357f160b4e767f5acfce7c.png)
第二章 SAS 编程基础第一节常量、变量与观测值2.1.1 观测值描述单一整体,如个别人、一个实验动物、一年、一个地区某些特性的一系列数据值称为观测值,又称观察。
2.1.2 变量给定特性的数据值的集合组成了变量。
在SAS数据集中,每一个观测值是由各个变量的数据值组成。
在数据集中每一列数据是一个变量。
1.命名SAS变量名和其他名称如数据集名等的命名规则都相同,它可以多至8个字符长,第一个字符必须是字母(A,B,C,….,Z),或者是下划线(_),后面的字符可以是数字或下划线。
空格不能出现在SAS名中,特殊字符(如$,@,#)也不允许在SAS名中使用。
SAS 系统保留了一定的名称作为特殊的变量名,这些名称以下划线开始和结尾。
如_N_和_ERROR_等。
2.变量特性SAS变量有两种类型,数值型和字符型。
字符型变量在名后用一“$”号来表示。
除了他们的类型外,S A S变量还有下列特性:长度、输入格式、输出格式和标记。
变量的长度特性,是指在SAS数据集中用以存储它的每一个值的字节数。
缺省长度是8(为了存储长度与缺省值不同的变量,需使用LENGTH语句)。
变量的特性,或者明确地说明,或者在它们首次出现时的上下文中给出定义。
例如:DATA A;C='BAD';PUT C;C='GOOD';PUT C;RUN;C在第一次出现时已被定义成字符型变量,长度为3,因此第二次再向c中赋值GOOD时,由于c已被定义成长度为3,故c中只存有‘GOO’。
PUT语句的作用是把变量的值输出到LOG窗口。
变量的其他特性将在后面逐渐介绍。
3.变量清单的简化表示在SAS程序中定义了完整的变量清单后,就可以在后面许多语句中使用缩写变量清单形式。
名称形式缩写意义形如:X1,X2,…Xn的带有序号的名称X1-Xn 从X1到Xn的所有变量形如 X P A * 的名称范围X-A 从X到A的所有变量X-NUMERIC-A 从X到A的所有数值变量X-CHARACTER-A 从X到A的所有字符变量特殊SAS名称_NUMERIC _ 所有数值变量_CHARACTER _ 所有字符变量_ALL _ 所有变量例如:INPUT NAME $ VARl VAR2 VAR3 VAR4 VAR5 VAR6;也可以写成:INPUT NAME $ VARl一VAR6;注意字符型变量NAME不包含在这个缩写清单中,有序号的变量不必全部列出,这些变量要求类型相同,或全是数值型的或全是字符型的。
第2讲-sas编程基础-1

打开已有数据集
首先,打开VIEWTABLE窗口 其次,选择菜单”文件/打开…”
武汉大学计算机学院
SAS数据集
SAS应用程序 SAS数据分析模块
数据直接输入
数据集
已有的SAS数据集
流行的数据库
其他文件格式
武汉大学计算机学院
将EXCEL数据的导入 导入Excel数据表的步骤如下:
在SAS中,选择菜单“文件 ”→“导入数据…” ,打开导入向导“Import Wizard”第一步:选 择导入类型(Select import type)后按下next 按钮。
武汉大学计算机学院
数据步语句
Length语句 指明字符变量长度。 语句格式 Length < 变量名 $> < 长度值 >; 例: DATA A; LENGTH NAME $ 13; INPUT NAME SEX $ H W; CARDS; ZhangZhihui F 1.70 52 ZhaoChangtai M 1.73 55 ; 注意 由于NAME变量已在LENGTH语句中定义为字符型量,故INPUT 语句中可以不再用$号作定义。
逻辑库和SAS文件
用户自定义SAS逻辑库 交互方式
命令方式
• Libname 逻辑库名 ‘SAS文件的存储目录’;
武汉大学计算机学院
逻辑库和SAS文件
Libname aa “e:\sasdata”; 定义一逻辑库aa 新建一数据集class Data aa.class; .... ....
DATA 语句; /*DATA步的开始,给出数据集名*/ Input 语句;/*描述输入的数据,给出变量名及数据类型和格式等*/ (用于DATA步的其它语句) Cards; /*数据行的开始*/ [数据行] ; /*数据块的结束*/ RUN; /*提交并执行*/ data temp; input name$ age@@; cards; Tom 34 johny 22 mary 34 Susan 26 Dora 29 Young 30 ; run;
SAS编程基础

第一章:DATA 步阐述DA TA 步是SAS 的一个关键步,正确理解其执行过程将会学习起来更方便。
1)DATA 步是一个循环,数据是一行一行地执行(与SQL 过程不同,它是对整个数据集进行操作);2)DA TA 步在执行时,将数据放在PDV 中,在这里将数据整理成想要的格式3)有三种情况可将PDV 中的数据输出到数据集中,OUTPUT 语句,return 语句,data 步结尾(;或run;)Output 语句:此语句出现在data 步中间时,将PDV 中数据输出到SAS 数据后,继续执行直到data 步结尾。
Return 语句:将pdv 中数据输出到SAS 数据集后,返回到data 步开头,执行下一次循环。
data 步结尾(;或run;):缺省形式,也是必须语句,否则DATA 步不完整。
相当于一个放在data 步结尾处的return 语句。
注:当一个DATA 步中含有OUTPUT 语句时,当执行到语句output 时才输出PDV 中的数据,data 步结尾处的默认输出不起作用。
4)退出SAS 数据步:stop 语句和abort 语句;其作用是退出DATA 步,并丢掉PDV 中的数据。
data aa; input ss pay; if _error_ then delete ; pi=constant('PI');/*常数pi*/ format pi 15.13; e=CONSTANT('e');/*常数e*/ datalines ; 111 100 aaa 200 444 300 run ; proc print ;run ;结果相同(只读取了第一条观测),左边在LOG 窗口显示一个提示,右边则显示一个出错信息注:abort<return|abend>,退出SaS 系统(与正常退出相同,有相关提示)。
5)DA TA 步的短路: IF expression ;(子集IF 语句):若表达式是假,系统立即返回到DATA 步开头,继续执行下一条观测,且不处理当前观测。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAS 软件与统计应用实验实验 2 SAS编程基础SAS 语言和其它计算机语言一样,也有其专有的词汇(即关键字)和语法。
关键字、名字、特殊字符和运算符等按照语法规则排列组成SAS 语句,一个SAS 程序由若干数据步、过程步组合而成,而每一个程序步通常由若干语句构成。
SAS 程序是在Editor 窗口中进行编辑,提交运行后可以在Log 窗口中显示有关信息和提示,在Output 窗口显示运行的结果。
2.1实验目的通过实验了解 SAS 编程的基本概念,掌握 SAS 编程的基本方法,掌握 SAS 数据步对数据集的管理和对数据的预处理。
2.2实验内容一、建立逻辑库与数据集,包括逻辑库的建立、直接输入数据建立数据集与读取外部数据文件建立数据集。
二、数据文件的编辑与整理,包括数据集的横向合并与纵向合并、数据集内容的复制、变量的增加与筛选、数据集的拆分和数据的排序。
2.3实验指导一、建立逻辑库与数据集1. 建立逻辑库【实验 2-1】编程建立逻辑库。
(1) 首先在 D 盘创建一个文件夹,如D:\SAS_SHYAN\SAS 数据集。
(2)建立逻辑库 mylib ,编辑并运行下面程序语句即可。
libname mylib "D:\sas_shiyan\sas 数据集 ";2.直接输入数据建立数据集【实验 2-2】将表 2-1(sy2_2.xls) 中的数据直接输入建立数据集 sy2_2,并将其存入逻辑库 mylib 中。
表 2-1职工工资编号姓名性别工作日期职称部门基本工资工龄工资奖金扣款实发工资3003王以平男1992-8-1助工生产6203005000142013004 林红女1993-8-1 助工供销620 280 500 200 12003005 吕兴良男1982-1-30 工程师技术1100 500 500 100 20003006 司马宇男1971-2-17 工人生产520 720 500 0 17403007 张学武男1967-10-9 工人保卫520 800 500 200 16203008 冯玉霞女1987-8-1 工程师生产1100 400 500 250 17503009 赵大强男1968-5-10 工人财务520 780 500 0 18003010 王萍女1987-8-1 工程师技术1100 400 500 100 1900代码如下:data mylib.sy2_2;length gzrq $ 10;input bh $ xm $ xb $ gzrq $ zc $ bm $ jbgz glgz jj kk sfgz;label bh=' 编号 ' xm=' 姓名 ' xb=' 性别 ' gzrq=' 工作日期 ' zc=' 职称 ' bm=' 部门 'jbgz=' 基本工资 ' glgz=' 工龄工资 ' jj=' 奖金 ' kk=' 扣款 ' sfgz=' 实发工资 ';cards;3003 王以平男 1992-8-1 助工生产620 300 500 0 14203004 林红女 1993-8-1 助工供销620 280 500 200 12003005 吕兴良男 1982-1-30 工程师技术1100 500 500 100 20003006 司马宇男 1971-2-17 工人生产520 720 500 0 17403007 张学武男 1967-10-9 工人保卫520 800 500 200 16203008 冯玉霞女 1987-8-1 工程师生产1100 400 500 250 17503009 赵大强男 1968-5-10 工人财务520 780 500 0 18003010 王萍女 1987-8-1 工程师技术1100 400 500 100 1900;RUN;运行完成后,在逻辑库mylib 中双击数据集名sy2_2,可以查看结果如图2-1 所示:图2-1 数据集 mylib.sy2_2说明:(1) SAS变量的基本类型有两种:数值型和字符型。
数值型变量在数据集中的存贮一般使用 8 个字节。
SAS 的字符型变量缺省的长度是8 个英文字符,可以使用LENGTH语句指定变量长度,LENGTH语句一般应出现在定义变量的Input 语句之前,格式为:LENGTH 字符型变量名$长度;如:LENGTH gzrq $ 10;(2)语句:2label bh = '编号 ' xm = '姓名 ' xb = '性别 ' gzrq = ' 工作日期 ' zc = ' 职称 ' bm = '部门 ' jbgz = ' 基本工资 ' glgz = ' 工龄工资 ' jj = '奖金 ' kk = '扣款 ' sfgz = ' 实发工资 ';为每个变量加标签。
(3)数据块中数据之间可以用空格隔开,也可以使用Tab 键。
3.读取外部数据文件建立数据集【实验 2-3】读取文本文件sy2_3.txt (图 2-2)建立数据集work.sy2_3 。
假设文本文件存放在文件夹“原始数据”中。
图2-2 文本文件 sy2_3.txt代码如下:data sy2_3;infile原始数据 \sy2_3.txt';input bh$ xm $ xb$@@;length gzrq$ 10;input gzrq$ zc $ bm $ jbgz glgz jj kk sfgz;run;注意:文本文件中数据之间用空格隔开,不能使用Tab 键。
运行完成后,在临时库work 中双击数据集名 sy2_3 ,可以查看结果如图2-3 所示:图 2-3数据集sy2_3【实验 2-4】读取 Excel 文件 sy2_2.xls(如表 2-1 所示)建立数据集work.sy2_4 。
已知 Excel 文件 sy2_2.xls 存放在文件夹“原始数据”中。
首先将表2-1 修改为如图2-4 所示的 Excel 表 sy2_4.xls, 并存放在原始数据中。
3图2-4 Excel 表 sy2_4.xls建立数据集work.sy2_4 代码如下:proc import out=sy2_4datafile =原始数据\sy2_4.xls"dbms = excel2000 replace;getnames = no;/*如果表中第一行为变量名,则删去此行*/run;注意: sy2_4.xls 中第 3 至 5 列中的多加的“0”是为了保证导入后字符型变量的长度正确。
二、数据文件的编辑与整理1.数据集的复制与修改【实验 2-5】将 mylib.sy2_2 中的“工作日期”去掉,基本工资小于600 的改为 600,生成新的数据集work.sy2_5 。
代码如下:data sy2_5;set mylib.sy2_2;drop gzrq;if jbgz< 600 then jbgz= 600;run;2.增加新变量【实验 2-6】在 mylib.sy2_2 中增加变量 yfgz(应发工资 =基本工资 +工龄工资 +奖金)、生成新的数据集 work.sy2_6 。
代码如下:data sy2_6;set mylib.sy2_2;yfgz = jbgz + glgz + jj;run;3.数据集的纵向拆分【实验 2-7】按基本工资是否大于600 将 mylib.sy2_2 拆分成两个新数据集work.sy2_7_1 和work.sy2_7_2 。
代码如下:data sy2_7_1 sy2_7_2;4set mylib.sy2_2;select;when (jbgz<600) output sy2_7_1;when (jbgz>=600) output sy2_7_2;end;run;4.数据集的纵向合并【实验 2-8】将上述拆分后的两个数据集纵向合并恢复原样,产生新的数据集work.sy2_8 。
代码如下:data sy2_8;set sy2_7_1 sy2_7_2;run;5.数据集的横向合并【实验2-9】将 mylib.sy2_2 中职称为“工人”的观测拆分成一个仅含编号、姓名和基本工资,一个仅含有编号和实发工资的两个新数据集work.sy2_9_1和work.sy2_9_2。
然后将work.sy2_9_1 和 work.sy2_9_2 合并成一个新数据集sy2_9。
(1)提取职称为“工人”的观测:data sy2_9_0;set mylib.sy2_2;if (zc = '工人 ');run;(2)建立两个数据集:data sy2_9_1;set sy2_9_0;keep bh xm jbgz;run;data sy2_9_2;set sy2_9_0;keep bh sfgz;run;(3)横向合并:data sy2_9;merge sy2_9_1 sy2_9_2;by bh;run;proc print; run;/* 列表显示数据集sy2_9*/6.数据的排序【实验 2-10】将 mylib.sy2_2 按 jbgz 升序、 sfgz 降序排序后生成新的数据集work.sy2_10 。
代码如下:5proc sort data=mylib.sy2_2 out = sy2_10;by jbgz descending sfgz;run;proc print data= sy2_10; /* 列表显示数据集 sy2_10*/ run;说明:在对两个数据集横向合并时,为了避免因两个数据集观测顺序不同造成混乱,一般应将两个数据集分别按同一个变量( BY 变量)排序后再合并,如【实验 2-9】中的横向合并可写成:Proc sort data = sy2_9_1;by bh;Proc sort data = sy2_9_2;by bh;run;data sy2_9;merge sy2_9_1 sy2_9_2;by bh;run;proc print; run;7.数据的列表显示【实验 2-11】列出数据集mylib.sy2_2 中所有男性职工的编号、姓名、部门、基本工资。
代码如下:Proc print data= mylib.sy2_2 label;var bh xm bm jbgz;label bh = ' 编号 ' xm = '姓名 ' bm = '部门 ' jigz = '基本工资 '; where xb= '男 ';run;2.4 上机演练【练习 2-1】表 2-2( lx2_1.xls )为某邮购服务部的部分顾客记录,编程进行如下操作:表 2-2 邮购服务部部分顾客记录姓名性别地区日期金额章文男华东1996-3-20 1099王国铭男华东1996-5-19 39童子敏女华北1996-1-5 986刘念新男东北1997-10-1 3581李思今女华北1997-4-4 659关昭女东北1996-11-5 358赵霞女东北1998-9-6 20106SAS 软件与统计应用实验(1)建立自己的逻辑库 (以自己名字的拼音命名 );(2)用数据步把此数据输入到SAS 数据集并存放在自己的逻辑库中;(3)列表显示男性顾客购买金额超过1000 的那些人;(4)按金额降序排序并输出结果;(5)把数据拆分为包含姓名、性别、地区的一个数据集和包含姓名、日期、金额的一个数据集;(6)用 MERGE 和 BY 合并上一步拆开的两个数据集。