目标•了解SAS系统的功能特点;•熟悉AS系统操作环境;•掌握SAS系统的有关概念;•学会使用DATA Step读入外部数据文件以及对现有的数据集进行读入、修改、拼接以及合并;•学会使用PROC Step的几个重要过程对数据集进行操作;•学会使用ODS(输出传递系统)控制输出;•了解SAS宏语言;第一章SAS系统简介•SAS提供的基本运行环境:显示管理系统。
介绍显示管理系统中的有关窗口、菜单及操作。
•运行一个简单的SAS程序:proc print data=sasuser.admit;varname sex agewhere age gt30;run; 第一章SAS系统简介•SAS系统对数据的管理:*SAS数据集(data set):*SAS数据视图(data view):*SAS数据库(library)和库标记:第一章SAS系统简介*标记一个SAS数据库的两种方法:1、通过菜单进行;2、libname 库标记引擎数据源选项;练习:用两种方法分别建立:1、一个默认的SAS数据库;2、一个包含ORACLE数据的SAS数据库;3、一个包含ODBC数据的SAS数据库。
第一章SAS系统简介*SAS文件快捷方式(File Shortcut):*SAS文件的两级名:库标记.文件名*SAS的永久库和临时库:永久库:SASUSER、SASHELP、自定义的库;临时库:WORK第一章SAS系统简介练习:1、建立一个文件快捷方式。
2、使用SAS Notepad窗口来创建和保存SAS 程序第一章SAS系统简介•SAS变量的类型:*字符型变量(Character Variable):*数值型变量(Numerical Variable):•SAS数据集数据的格式:*输入格式(Informat):指示SAS系统如何读入数据。
*输出格式(Format):指示SAS系统如何输出数据。
第一章SAS系统简介它们的一般形式如下:*<¥>informat-name<w>.<d>*<¥>format-name<w>.<d>¥ 代表变量是字符型的informat-name 输入格式名format-name 输出格式名w 输入或输出的宽度. 必须的分隔符d 小数部分的长度第一章SAS系统简介•SAS系统提供的几种常用输入输出格式:w.d 标准的数字型格式¥w. 标准的字符型格式COMMAw.d 数字中加入逗号DOLLARw.d 数字中加入逗号,数字前加入¥DATEw. 日期格式BESTw. SAS选择最佳表示法此外,用户还可以自定义格式。
第一章SAS系统简介•实例对比:实际存储输入数据输入格式数据值输出格式显示结果12234.1234 →8.2 8.2 →12234.1212,234.1234 →comma8.2 →12234.12 →comma8.2 →12,234.12¥12,234.1234 →dollar8.2 dollar8.2 →¥12,234.12第一章SAS系统简介•SAS日期时间值:4Jan1776 1Jan1959 1Jan1960 1Jan1961 26Jul1989-67019 -365 0 366 10799•将一个日期时间表示为一个常数:将日期或时间加上引号,后面加上d,如’01JAN86’d 。
第一章SAS系统简介•SAS通过输入格式和输出格式将日期值与其他较易阅读的日期形式联系起来:如1992年10月16日可表示为:MMDDYYw. 101692(MMDDYY6.)或者10/16/92(MMDDYY8.)DDMMYYw. 161092(DDMMYY6.)或者16/10/92(DDMMYY8.)DATEw. 16OCT92(DATE7.)或者16OCT1992(DATE9.)第二章SAS程序•SAS 程序由两种程序步组成:*Data Step;(数据步)以data 语句开始,用以创建和处理SAS数据集;*Proc Step:(过程步)以proc 语句开始,主要用于处理SAS数据;第二章SAS程序•一个简单例子:data simple;set mylib.bclass;run;proc print data=simple;var name age height;where age=13;run;第一节Data Step•Data Step用于将原始数据文件转换成SAS数据集。
•Data Step的一般形式:DATA SAS-data-set; INFILE ‘filename’option; INPUT 语句;其他SAS语句;RUN;第一节Data Step•一个典型原始数据文件内容:1 1----5----0----5---(用于指出字符的位置)01MAR1995LON19801MAR1995FRA20701MAR1995LON205……第一节Data Step•一个简单应用:data europe;infile’c:\mylib\overseas.dat’;input @1 date $9. @10 dest$3. @13 boarded 3.;run;proc print data=europe;run;第一节Data Step •SAS系统执行数据步的过程:主要分为两个阶段:•编译数据步;•执行数据步:第一节Data Step在编译期间,SAS系统执行以下步骤:1)创建一个输入缓冲区来存放外部文件的一条记录:1 11 2 3 4 5 6 7 8 9 0 11 12 13 14 5 …2)创建一个PDV(Program Data Vector)来存放当前的一个观测;第一节Data StepVALUE:BOARDEDN8DEST$3DATE$9NAME:TYPE:LENGTH:第一节Data Step 3)创建SAS数据集的描述部分;EUROIPEDATE DEST BOAEDED$ $ N9 3 8Data Step 流程:YESNO第一节Data Step编译程序初始化变量执行INPUT 语句执行其它语句写入SAS 数据集下一个STEP 文件结束?第一节Data Step•使用INPUT 语句的column 模式读取外部原始数据文件:这种模式适合读入下列文件:•数据固定在某些列中;•数据中只包含标准的字符和数字;Column模式下INPUT语句的一般形式:INPUT variable ¥ startcol-endcol…;第一节Data Step其中:Variable:指的是变量名;¥:如果出现则说明此变量是字符型变量;Startcol:确定输入域中的起始列;Endcol:确定输入域中的结束列;如:input lname¥ 1-15 fname¥ 21-35 salary 46-51;第一节Data Step练习:用Column模式读入一个文件overseas.dat,该文件保存在c:\mylib 中,创建后的SAS数据集名为mylib.column,最后查看该数据集的内容。
第一节Data Step•使用INPUT 语句的Formatted 模式读取外部原始数据文件:这种模式适合读入含有不标准数据的文件,Formatted 模式中可以:•将输入指针移到数据域的开始位置;•定义变量名;•定义输入格式;第一节Data StepFormatted 模式下INPUT语句的一般形式是:INPUT pointer-control variable informat…;其中pointer-control 是输入指针控制符:@n 表示将输入指针移动到第n列;+n 表示将输入指针向后移动n列。
如:input lname ¥15. @21 fname +2 sex ¥1;第一节Data Step几个informat 的例子:7. 或者7.0 读入7列数字型数据;7.2 读入7列数字型数据,保留2位小数;¥6. 读入6列字符型数据;COMMA6. 读入6列数字型数据,去掉其中的非数字字符,如‘,’,‘¥’;MMDDYYw. 101692(MMDDYY6.)或者10/16/92(MMDDYY8.)DDMMYYw. 161092(DDMMYY6.)或者16/10/92(DDMMYY8.)DATEw. 16OCT92(DATE7.)或者16OCT1992(DATE9.)第一节Data Step练习:用Formatted模式读入一个文件overseas.dat,该文件保存在c:\mylib 中,创建后的SAS数据集名为mylib. Format,最后查看该数据集的内容.可以发现:用不同的模式有时可以得到同样的结果第一节Data Step•使用Data Step 增加数据集中的变量:•赋值语句的一般形式:variable=表达式;表达式中可以包含SAS操作符和函数。
•SAS函数的一般形式:函数名(参数1,参数2,…);(参数之间以逗号隔开,可以是常数、变量、表达式或其它函数)第一节Data Step常用的操作符:操作符作用举例+ 加法sum=x+y;-减法diff=x-y;* 乘法mult=x*y;/ 除法divide=x/y;** 幂运算raise=x**y;|| 字符串拼接str=str1||str2;第一节Data Step•一个应用例子:data mylib.dfwlax;infile'c:\mylib\dfw.dat';input filght$ 1-3date mmddyy6.dest$ 10-12 boarded 13-15trans 17-18nomev21;total=boarded+trans+nomev;(或total=sum(boarded,trans,nomev);)run;proc print data=mylib.dfwlax;format date date7.;run;第一节Data Step•条件转移语句:IF SAS条件表达式THEN 语句;ELSE 语句;(ELSE语句不是必须的)条件表达式主要包含操作数和操作符:变量名比较操作符操作数操作符常数逻辑操作符第一节Data Step操作符符号意义LT < 小于(less than)GT > 大于(greater than)EQ = 等于(equal)比较操作符LE <= 小于等于(less equal)GE >= 大于等于(greater than)NE ^= 不等于(not equal)IN 等于列举中的一个AND & 并且逻辑操作符OR -或者NOT ^ 非第一节Data Step 几个比较操作符用法的例子:If dest=‘LON’If dest in (‘lon’,’par’)If flight=‘219’If boarded lt150If mail>freight第一节Data Step•一个应用例子data dfwlax;infile'c:\mylib\dfw.dat';input filght$ 1-3date mmddyy6.dest$ 10-12 boarded 13-15trans 17-18nomev21;total=sum(boarded,trans,nomev);if dest='DFW'then rev=sum(boarded,trans)*600;else if dest='LAX'thenrev=sum(boarded,trans)*900;proc print data=dfwlax;format date date7.;run;第一节Data Step •用DROP=和KEEP=选项选择数据集的变量;它的一般形式是:DATA数据集(DROP=变量序列);DATA 数据集(KEEP=变量序列);练习:用DROP=和KEEP=选项修改前例。