SAS之编程基础(一)

浏览: 3501
SAS

SAS之编程基础(一)

2.1 SAS语言组件

2.1.1 SAS文件

使用SAS时候会碰到不同类型的文件,如SAS数据集、SAS目录册,这些由SAS创建、储存、管理的文件就是SAS文件。

所有的SAS文件都保存在SAS逻辑库中。

最常用的SAS文件就是SAS数据集和SAS目录册。

2.1.2 SAS外部文件

SAS不能直接识别的数据文件称之为外部文件,外部文件一般用于储存数据。

外部文件一般用来储存以下内容:

  • 要读入SAS数据文件的原始数据;
  • SAS程序语句
  • 过程步输出

2.1.3 DNMS文件

SAS软件可以和其他数据库产品进行数据文件转换。比如数据文件方面使用最广泛的DBMS(database management system)数据库系统文件。

2.1.4 SAS语言元素

SAS语言由语句、表达式、选项、格式,以及其他编程语言名称类似的函数组成:

SAS语句有两种语句:

  • 数据步
  • 过程步

数据步是一组语句组合,可以进行以下操作:

  • 从外部文件读取数据
  • 将数据写入到外部文件中
  • 读取SAS数据文件和视图
  • 创建SAS数据文件和视图

过程步用来对SAS数据集进行分析和产生报表。比如对数据集进行分析、画图、查询和打印等操作。

2.1.5 SAS宏工具

BASE SAS 软件包括SAS宏功能,可以用来客户化以及拓展SAS程序,减少重复代码的输入。宏就是包含被编译的宏程序语句和文本的SAS文件。

可以使用宏自动的生成SAS语句和命令,在日志中写入信息,建立和改变宏变量的值。

2.2 SAS文件系统

2.2.1 逻辑库

SAS逻辑库由一组SAS文件组成。SAS软件系统的信息。

SAS软件系统的信息组织有两层,第一层是SAS逻辑层,第二层是SAS文件。

SAS逻辑库是一个逻辑概念,本身不是物理实体,它对于的实体是操作系统下的一个文件夹或几个文件夹中的一组SAS文件。

1.逻辑库名与引用SAS文件

逻辑库名是SAS名。长度的=不能超过8B 。如:ResDat

建立SAS逻辑库的方法:

  • 用菜单操作;
  • 用LIBNAME语句

语句格式:

LIBNAME libref <engine> 'SAS-data-library'

语法说明:

LIBNAME :逻辑库名

libref <engine> 引擎名称

'SAS-data-library' 逻辑库对应的物理地址

2.临时库和永久库

临时逻辑库是指它的内容只在启动SAS时存在,一旦退出SAS时内容完全被删除。

系统默认的临时逻辑库为WORK,引用临时库WOR中文件时,可以不加库名WORK

永久逻辑库是指它的内容在SAS关闭对话之后仍旧保留,直到再次修改或删除。

SAS系统中除了WORK以外的逻辑库都是永久库。

3.库引擎

库引擎的功能包括:

  • 读取和写入数据
  • 列出库中的文件
  • 删除和重命名文件

SAS通过不同库引擎读写不同格式的文件。每个SAS引擎都有着自身的运行特性。

  • 运行由其他版本SAS软件生成的文件;
  • 读取由其他软件生成的数据文件;
  • 存储和访问硬盘或者磁带上的文件;
  • 决定文件中的变量和观测如何放置;
  • 将文件从物理位置地址读取放入到内存中;
  • 在不同的操作系统之间传输SAS文件

2.2.2 数据集

1.数据集分类

数据集有两类:

  • SAS数据文件(同时描述信息和存储数据值)
  • SAS数据视图(不实际存储数据,只包含表的描述信息以及一组用来读取数据的查询语句)

以上两个数据文件在同一级目录或逻辑库下时不能同名。

2.数据集构成

  • 描述信息
  • 数据值

SAS数据集的一行被称之为观测,一列被称之为变量,包括一组有着相同的特征的值。SAS使用缺失值表示一个观测中某个变量值得缺失。

2.3.3 数据文件

SAS数据文件是包含描述信息和数据值的SAS数据集。

一般来说,SAS数据文件分类如下:

  • 普通的SAS数据文件:SAS格式的数据文件
  • 接口数据文件:以其他数据软件格式储存的数据的数据文件。
  • 数据文件实际储存数值,视图只是包含表的描述信息以及一组用来读取数据的查询语句。
  • 数据文件是静态的,视图是动态的。
  • SAS数据集可以保存的在磁带或者其他的存储媒介上,但是数据视图由于其他动态特性,不能保存在磁带上。
  • SAS数据视图是只读性的,不可以修改,而一些SQL视图可以被修改。
  • SAS数据文件可以被压缩,而视图则不可以。

2.2.4 数据视图

1.数据视图定义

SAS数据视图就是用来从其他文件中读取数据的一种SAS文件。

SAS视图一般分为两种:

  • Native View ,由数据步或者SQL过程创建
  • Interface View,由SAS/ACCESS软件创建,可以读取其他数据库管理系统(DBMS)的中的数据库。

2.何时使用视图

数据视图占用额外的运行时间,数据文件占用额外的硬盘空间。

3.数据视图的使用优势

  • 可以使用连接多个表的视图来合并数据集
  • 数据视图可以节省大量的空间
  • 数据视图可以保证读取的数据集永远都是新的。
  • 更改一个数据视图只需要改变这个视图的查询语句
  • 使用SAS软件,视图可以将多个不同的主机上的数据文件整合,以整体的形式呈现。

4.数据步视图

数据步视图包含用于多个数据源中读取数据的数据步程序,这些数据源包含以下几种:

  • 原始数据文件
  • SAS数据文件
  • PROC SQL视图
  • SAS/ACCESS视图
  • DB2、ORACLE或者其他DBMS数据

语法格式:

data 数据集名称/view=数据集名称;
...
SAS语句
...
run;

5. PROC SQL视图

PROC SQL视图为一个带有名称的PROC SQL 查询。可以读写的数据源同数据步视图。

例如:

proc sql;
create view Resdat.e as select * from Resdat.class;
quit;

2.2.5 存储编译的DATA步程序

1.定义

存储编译的DATA步程序是包含已经被编译过DATA步程序并储存在SAS逻辑库中的程序文件。文件类型是程序。

2.创建存储编译的DATA步程序

语句格式:

DATA data-set-name(s) / PGM=stored-program-name<(<password-option><SOURCE=source-option>)>;

语法说明:

data-set-name 数据集名称

stored-program-name 存储编译的DATA步程序名称

password-option 给DATA步程序名称分配一个密码

source-option 存储或编译源码

2.2.6 其他SAS文件

1.表词典

2.目录册文件

2.3 SAS语言元素

主要的语言元素包括:

  • 数据集选项
  • 输出和输入格式
  • 函数和CALL子程序
  • 应用响应测量宏
  • 语句
  • SAS系统选项
  • 表达式

2.3.1 数据集选项

括号中的数据集选项可以对数据集进行如下操作:

  • 重新命名变量;
  • 选择需要的观测;
  • 输出数据集中保留或删除的变量;
  • 数据集加密;

语句格式:

Data-set-name(Data-set-options)
(options-1-value-1<...option-n=value-n>)

2.3.2 输入和输出格式

输出格式format是SAS用来确定如何输出或写出数据值的指令,用FORMAT控制数据值在输出时使用的格式,如YYMMDD10,格式将一个日期数输出读入到新的数据集中。

输出格式informat是SAS用来确定如何将数据读入变量的指令。

语句格式:

<$>format<w>.<d>

<$>format<w>.<d>

格式说明:

$ 指定为字符格式,如果该项空缺,则默认是数值格式

format 规定为有效的SAS输出格式

informat 规定为有效的SAS输入格式

w 设定输入输出的长度,一般来说是数据所占的列的数目

d 设定数据值数据中华小数点的位数

2.3.3 函数和CALL子程序

1.函数定义

SAS哈数对数据参数进行计算处理并返回一个值。

在BASE SAS软件中,可以在数据步程序语句、WHERE表达式、宏语句、SQL语句以及一些统计过程的语句中的使用函数。

2.CALL子程序定义

CALL子程序用来改变变量值,或执行一些系统功能,CALL子程序类似于函数,但是不能再赋值语句使用,所有的SAS CALL子程序都只能被CALL语句使用。

也就是所有的CALL子程序都要放在CALL关键词后。

2.3.4 语句

SAS语句就是一系列关键词、SAS名称、算符,以及特殊字符的组合。所有的SAS语以分号结尾。

SAS语句一般分为 数据步语句 与 过程步语句 ,以及可以用在SAS程序任何地方的全局通用语句。

KEWWORD parameter ... <item1|item2...|itemn>options;

关键词 参数... <项目1或项目2...项目n>选项;

其中:

  • 粗体表示必须按显示形式书写的关键词;
  • 一般字体表示用户提供的信息;
  • < >表示括号内的信息可选;
  • | 表示任选

1.可执行数据步语句和声明数据步语句

2.全局通用语句

2.3.5 SAS系统选项

系统选项用来控制SAS的运行方式,如SAS系统启动、软硬件的连接,SAS程序的运行等。

语句格式:

OPTIONS options(s):

option设定一个或多个系统选项,任何系统选项都有一个默认设置。

2.4 表达式

表达式由一系列操作符和操作对象构成,产生一个目标值。

使用表达式可以对变量作变换和赋值,创建新变量,计算新数值以及控制条件语句的运行等。

操作对象有:

  • 变量;
  • 常数。

操作符包括:

  • 算术算符
  • 比较算符
  • 逻辑算符
  • SAS函数
  • 括号

例 2.7 表达式里允许有空格

Y=X+10;

Y= X+ 10; /*例中,两语句等价*/

2.4.1 SAS常数

SAS常数是SAS系统可以识别的一些固定值。

SAS常数值包括:

  • 数字;
  • 引号括起来的字符串;
  • 其他特殊记号

SAS常数的5种类型:

  • 数值常数;
  • 字符常数;
  • 日期时间数值常数;
  • 十六进制数值常数和字符常数;

1.数值常数

数值常数的表示格式包括:

  • 标准格式: 1,01,+1,-1,1,1
  • 科学计数法:1,1e11,1.2e
  • 十六进制格式:1ex,12x,9x

2.字符常数

字符常数通常由单引号括起来的1~32767个字符串组成。如果字符常数内含有引号,引用时,要么它的引号用两个连续的单引号,要么用一个双引号。

3.日期时间常数

将日期时间值表示为常数时,要使用相应的格式值。格式值带单引号,后面跟一个D(日期),T(时间),DT(日期时间)。

2.4.2 SAS算符

1.算术算符


表达式中有一个运算对象是缺失值时,结果也是缺失值。

data;
X=3.5**2.5;
put X=;
Y=9+1/3;
put Y=;
x=.;
Y=1+X;
put Y=;
run;

运行结果:

X=22.917651494
Y=9.3333333333
Y=.
NOTE: 缺失值的生成是对缺失值执行操作的结果。
指定每个位置的方式: (次数)(行:列)。
1,位置: 24980:4。
NOTE: 数据集 WORK.DATA2 有 1 个观测和 2 个变量。
NOTE: 压缩的数据集 WORK.DATA2 增大了 100.00%。
压缩为 2 页;不压缩将需要 1 页。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒

2.比较算符


比较准则:

  • 数值和字符都可以
  • 结果为真赋值为1,假赋值为0;
  • 字符值从左到右逐个按ASCII码排列顺序进行比较
  • 缺失值参加比较时。它比任何有效值都小。

if x<y then x=5;

else c=12;

3.逻辑运算符


4.其他运算符


5. 运算次序

  • 先计算括号里面的表达式
  • 先执行较高优先级的运算
  • 相同优先级的算符,先执行左边的运算。

2.5 SAS变量

2.5.1 变量类型

SAS变量分为数值变量和字符变量

1.数值变量

数值变量是SAS系统以浮点(floating-point)方式存储的数据,数值变量包括日期和时间。

2.字符变量

字符变量可以由阿拉伯字母、数字0~9以及其他一些特殊的字符组成。

2.5.2 变量属性

SAS变量的属性包括长度、输入输出格式和标签,未设定属性的变量在他们第一次出现时由系统给出。


2.5.3 变量列表以及其缩写规则

许多的SAS语句都需要规定变量,即按顺序列出变量名。了解变量列表的缩写规则,会克服复杂变量引用带来的麻烦。SAS程序中规定了完整的变量列表后,就可以使用缩写的变量列表。

2.5.4 创建变量

DATA步骤创建变量的方式包括:

  • 使用赋值语句;
  • 使用INPUT语句;
  • 使用FORMAT或INFORMAT语句;
  • 使用LENGTH语句;
  • 使用ATTIRB语句

1.使用赋值语句

如果等号左边的变量不存在于数据集中,则赋值语句会产生一个新的变量,在没有规定明确格式的情况下,新的变量格式采用系统默认的格式。

data a;

x=1;

run; /*数据集a中有个变量x,值为1*/

2.使用INPUT语句

例:

data b;
Input x $;
Datalines;
Aaa
;
Run;

3. 使用FORMAT或INFROMAT语句

data b;
set b;
informat y$9.;
run;

2.5.5 变量类型转换

1.字符自动转换为数值

2.函数INPUT将字符转换为数值

3.数值自动转换为字符

4.函数PUT将数值转换为字符

2.5.6 自动变量

自动变量是由数据步语句自动创建的。这些自动变量被加入到程序数据向量(PDV)中,但是并不输出到数据集中,自动变量在重复过程中被保留,而不是被设定为缺省。

data one;
set sashelp.class;
/*只保留数据集中的数值变量*/
keep _numeric_;
run;

data one;
set sashelp.class;
run;
proc sort data=one;/*将观测按照age的数值排序,拥有相同数值的age为一个by*/
by age;
quit;
data one;
set one;
by age;
/*取每个age by组的第一个观测*/
if first.age=1;
run;
proc print data=one;
quit;



2.6 错误类型与处理

SAS系统能够检查出错误类型有:

  • 句法错
  • 词义错
  • 运行错
  • 数据错
  • 与宏有关的错

SAS系统提交含有错误的程序后,LOG窗口会显示的信息有:

  • 出错的词;
  • 错误的可能位置
  • 对错误的说明

2.6.1 句法错

句法(SYNTAX)错误是由程序含有不符合SAS语言的规则引起。

最常见的语法错误有:

  • 关键词拼写错误
  • 遗漏RUN语句
  • 引号或括号不配对
  • 选项无效
daat a;
x=2;
run;

日志信息:

29427 daat a;
----
14
WARNING 14-169: 假定符号 DATA 错拼为 daat。

29428 x=2;
29429 run;

NOTE: 禁用了数据集 WORK.A 的压缩,因为压缩的系统开销将增大数据集的大小。
NOTE: 数据集 WORK.A 有 1 个观测和 1 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒

2.6.2 词义错

词义错的类型有:

  • 变量名拼写错误
  • 不正确的引用
proc print data=ResDat.Idx000001(obs=10);
var data clpr;
run;

log运行日志:

29430 proc print data=ResDat.Idx000001(obs=10);
ERROR: 没有分配逻辑库引用名 RESDAT
29431 var data clpr;
29432 run;

NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: PROCEDURE PRINT”所用时间(总处理时间):
实际时间 0.00
CPU 时间 0.00

2.6.3 运行出错

经常运行出错的情况有:

  • INPUT语句与数据不匹配
  • 非法的数学运算
  • 对BY组分析处理时没有相应的分类排序
  • 引用不存在的数组元素
  • 用INFILE和FILE语句打开或关闭文件时出错
  • 函数的自变量不合法

LOG窗口显示的运行错误信息包括:

  • 一个出错信息
  • 存储在输入缓冲区中的值
  • 发生错误程序数据向量的内容
  • 用NOTE揩油的一个注解
data A;
input Stock $ Money Price;
vol=Money/Price;
cards;
600001 1329 6.3
000894 2000 0
;
run;

日志信息:

29433 data A;
29434 input Stock $ Money Price;
29435 vol=Money/Price;
29436 cards;

NOTE: 检测到 0 为除数,位置: 行 29435 列 10。
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
29438 000894 2000 0
Stock=000894 Money=2000 Price=0 vol=. _ERROR_=1 _N_=2
NOTE: 在以下位置无法执行算术运算。运算结果已设为缺失值。
每个位置的指定方式: (次数)(行:列)。
1,位置: 29435:10。
NOTE: 数据集 WORK.A 有 2 个观测和 4 个变量。
NOTE: 压缩的数据集 WORK.A 增大了 100.00%。
压缩为 2 页;不压缩将需要 1 页。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.04 秒
CPU 时间 0.01 秒

29439 ;
29440 run;

2.6.4 数据错

当数据不适合的相应的SAS语句时,就会报错。带有INPUT语句的SAS程序可能产生数据错。

LOG窗口显示的数据错信息包括:

  • 一个注释描述这个错误
  • 存储在输入缓冲区中的值
  • 存储在程序数据向量里的值
data A;
input Name$Age;
cards;
Wang 35
Zhang A2
Hu 22
;
proc print;
run;

日志窗口信息:

29418 data A;
29419 input Name$Age;
29420 cards;

NOTE: 在第 29422 行、第 8-9 列中有对“Age”无效的数据。
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
29422 Zhang A2
Name=Zhang Age=. _ERROR_=1 _N_=2
NOTE: 数据集 WORK.A 有 3 个观测和 2 个变量。
NOTE: 压缩的数据集 WORK.A 增大了 100.00%。
压缩为 2 页;不压缩将需要 1 页。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒


29424 ;
29425 proc print;
29426 run;

NOTE: 从数据集 WORK.A. 读取了 3 个观测
NOTE: “PROCEDURE PRINT”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒

2.7 SAS输出

1.SAS日志

SAS日志信息包括:

  • 提交的运行的程序语句
  • 程序创建的数据集
  • 程序运行过程中的注释、警告或错误信息;
  • 每个数据集包括的变量和观测的个数;
  • 每个步骤运行的时间

2.程序结果

绝大多数SAS过程步和一些数据步的结果,是可以发送文件,或者打印出来,使用ODS的话,还可以将结果输送到网页中。

3.SAS控制台日志

激活SAS日志后,当系统初始化或结束重大错误时才会用到SAS控制日志。

2.8 SAS程序

SAS程序由多个SAS语句构成,SAS程序中语句可以分为两类步骤:

  • 数据步
  • 过程步

2.8.1 书写规则

SAS程序由SAS语句构成。

1.SAS语句的书写规则灵活自由:

  • 语句可在行的任一列开始;
  • 一个语句可以分写为多行
  • 多个语句可以写在同一行
  • 语句中各项之间至少用一个空格或特殊字符隔开。

2.应该遵守的书写规则

  • 不同程序步间留空行;
  • 每条语句都要另起行

3。注释语句的两种形式

  • /*注释内容*/

2.8.4 数据步

数据步用来输入数据。

  • 在数据步中,可以创建SAS数据集(包括SAS数据文件和数据视图)
  • 数据步可以使用的输入数据源、外部文件或SAS数据集,然后对这些数据进行处理。

2.8.3 过程步

过程步通过一系列SAS语句来调用和执行程序,通常以一个SAS数据集作为输入数据。使用过程步可以对数据集中的数据进行分析,生成报表和 其他结果,也可以修改过程步使其只输出所需要的结果。

2.9 SAS词段的使用和命名规则

SAS名称是一系列的字母和下划线开头的字符的集合,SAS名称可以报考字母、下划线、数字,并且最大可以达到32767个字符。

多数情况下,SAS名称都是8个字符。

SAS名称不区分大小写,一般处理为大写字符。

SAS名的类型如下:

  • 逻辑库名
  • 数据集名
  • 变量名
  • 格式名
  • 过程名
  • 数组名
  • 语句标号名
  • 特殊文件名
  • 其它名

2.9.2 其他SAS词段

1。文本词段

包含在单或双引号之间的1-32767个字符组成。

2。数值

有由数字组成,并带有一些特殊符号。

3。特殊字符

出去空格、字母数字之外的键盘字符。

推荐 0
本文由 lingan 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册