2024年4月26日发(作者:)

Engine(引擎)是一种访问架构,SAS系统通过它迅速

地对其它数据库管理系统中文件进行读入和写出。

1.LIBNAME语句

1.1解读

定义 SAS 逻辑库。具体地说,它可以

(1)向 SAS 标识 SAS 逻辑库

(2)将引擎与逻辑库关联

(3)让您指定逻辑库的选项

(4)为逻辑库指定逻辑库引用名

通俗得讲,LIBNAME语句把一个libref(库标记名)

和一个目录联系起来,使用户可以在SAS语句中使用

库标记来指示这个目录。提交该程序时自动引用该

SAS 逻辑库

1.2 语句格式

1、LIBNAME libref

<'SAS-data-library'>

2、LIBNAME libref Clear;

3、LIBNAME libref |_ All_ List;

三种格式反映了LIBNAME语句的三种用法

选项说明

Libref

Engine

Sas-Data-Library

Access=Readonly|Temp

Clear

_All_

List

规定逻辑库

规定引擎

规定主机系统下一个有效的物理地址

规定逻辑库为只读或可修改属性

清除与库标记的联系

列出所有逻辑库的属性

在Log窗口列出逻辑库的属性。

语句

SAS变量的基本类型有两种:数值型和字符型。数值

型变量在数据集中的存贮一般使用8个字节。SAS的

字符型变量缺省的长度是8个英文字符,可以使用

LENGTH语句指定变量长度,LENGTH语句一般应

出现在定义变量的Input语句之前,格式为:

LENGTH 字符型变量名 $长度

例如:length name $20 ;

3. input 语句

3.1解读

INPUT语句 用于向系统表明如何读入每一条记录。

它的主要功能有:读入由语句指定的数据列;为相应

的数据域定义变量名;确定变量的读入模式(共有四

种模式:column模式,formatted模式,list模式及

named模式)。

input语句执行后,SAS将读取的数据暂时先保存在

内存缓冲区,然后执行后面的语句,后面的语句可以

对暂存在内存缓冲区中的变量值进行修改,到最后才

将整条数据写入数据集,写入数据集的数据就不能在

当前data步中再修改。

注意:INFILE语句用于确定一个包含原始数据的外

部文件,必须在执行INPUT语句前执行,如果要在

程序中直接嵌入数据,就用CARDS语句代替INFILE

语句。

3.2 语句格式(Column模式)

INPUT variable <$> start-column<-end-column><.decimals><@|@@>;

说明:

variable 变量名

$ 跟在变量后面,表明这个变量是字符型变量

start-column 起始列号

end-column 结束列号,如果变量值只包含一列,则

可省略

.decimals 如果输入值中没有包含一个隔开整数部分

与小数部分的小数点,decimals用来显性的指明小数

部分

@ 单尾符

@@ 双尾符

举例说明:input name $ 1-10 pulse 11-13 waist 14-15

gender $ 16;

语句

Set语句可以用来读取单个数据集中的数据,也可以

用来读取多个数据集中的数据拼接SAS新的数据集。

程序为:

DATA 新数据集;

SET 输入数据集1 输入数据集2 ….;

Run;

如果不适用DROP=和KEEP=选项,在新的数据集中

将包含所有旧数据集的变量。

循环语句

语句一:

DO WHILE (expression);

...more

END;

语句二:

DO UNTIL (expression);

...more

END;

语句三:

DO index-variable=start

;

. . . more SAS statements . . .

END;

例如:

do i=1 to 10;

do i=10 to 0 by -1 while(month='JAN');

语句四:

DO item-1<,…item-n>

UNTIL(expression)>;

. . . more SAS statements . . .

END;

例如:

do count=2,3,5,7,11,13,17;

do month='JAN','FEB','MAR';

do i='01JAN2001'd,'25FEB2001'd,'18APR2001'd;

这个语句是SAS比较特殊的循环结构,可以对枚举的

项目依次执行,终止循环就是执行完这些列举的项

目。

语句五:

DO over array-name;

. . . more SAS statements . . .

END;

例如:

data test;

input sc01-sc05;

array s sc01-sc05;

do over s;

s= s*100;

end;

cards;

0.95 0.88 0.57 0.90 0.65

;

这个语句也是SAS比较特殊的循环结构,专用于数

组,将数组的每一个元素访问一遍。

6. IMPROT 语句

import过程可以读取的数据有Access数据库、Excel

文件和带分隔符的文件。

6.1语法格式

PROC IMPORT

DATAFILE="filename" | TABLE="tablename"

OUT=SAS-data-set

<(SAS-data-set-options)>

;

说明:

DATAFILE="filename" 用来指定数据文件的位置,

如果是Access则用TABLE="tablename"指定需要读

取的数据表;

OUT= 指定输出数据集的名称;

DBMS=identifier 指定导入数据表的类型;几个常用

的DBMS选项如下

ACCESS 读取MS ACCESS2000/2002数据

EXCEL 读取Excel2000/2002数据

CSV 读取逗号分隔的文件

DLM 读取分隔符文件,需要用DELIMITER=指

明具体的分隔符

TAB 读取Tab分隔的文件

REPLACE选项替换原来已经存在的数据集,缺省情

况下是不替换,并在LOG窗口中予以提示;

6.2 proc import读取带分隔符的文件

语法格式:

PROC IMPORT

DATAFILE=

OUT=

DBMS=

REPLACE;

(Data source statements:)

DATAROW=n ;

DELIMITER= ;

GETNAMES=YES|NO;

说明:

DBMS= 需要指定DLM,逗号分隔文件可省略;

DATAROW=n; 指定从数据文件的第几行开始读取,

该选项缺省情况下,如果getnames=yes则从第二行开

始读取,getnames=no从第一行开始读取;

DELIMITER=; 指定分隔符;

GETNAMES=; 告诉SAS是否将数据文件的第一行

作为变量读取,该选项缺省为yes。

如果第一行是变量名,而该选项为no则会将列为数

值型的第一行读取为缺失值。

当指定getnames=no时,对于DLM文件,则SAS自

动将变量命名为VAR1, VAR2, ...;对于Excel文件,

则SAS自动命名变量为F1, F2, …

举例:

proc import datafile="C:My

"

out=mydata

dbms=dlm

replace;

delimiter='&';

getnames=yes;

run;

6.3 proc import读取Excel文件

语法格式:

PROC IMPORT

DATAFILE=

OUT=

DBMS=

REPLACE;

(Data source statements:)

SHEET=;

GETNAMES= YES|NO;

注:读取Excel时,可以不指定DBMS=选项。

举例:

proc import datafile="c:clinic "

out=drug1;

sheet='lab';

getnames=yes;

run;

6.4 proc import读取数据库表(如Access)

语法格式:

PROC IMPORT

TABLE=

OUT=

DBMS=

REPLACE;

(Data source Statements:)

DATABASE=

PWD=

UID=

WGDB=

说明:

DATABASE= 指明数据库存放的路径及名字

UID= 数据库用户名

PWD= 密码

WGDB= 工作组名称

举例:

proc import table="customers"

out=

dbms=access97;

uid="userid";

pwd="mypassword";

database="c:";

wgdb="c:";

run;

通常情况下,proc import是可以不掌握的,通过视窗

操作可能更方便,特不过用proc import能够更精细

的控制。在写import过程的时候,要特别注意分号的

位置,从最开始的语法格式那里可以看出,proc

import后面的一般选项是连在一起写的,中间用空格

隔开,最后才以分号结尾;而数据源选项则每一项都

要以分号结束。这些地方往往容易出错。

7. CARDS语句

用于直接输入数据,标志着数据块的开始。格式如下:

CARDS;

数据块

和BY语句

SORT语句将指定的数据集按指定变量排序。 使用

BY语句可以使生成的数据集按照某个变量排序,但

输入数据集必须预先按该变量排序。使用PROC

SORT语句可以进行排序,一般形式为:

PROC SORT DATA=数据集 OUT=排序后的数据集;

BY 变量;

RUN;

e.g. Proc sort date=stockreturn;

by firm date;

run;

9. 宏

在宏变量前加&来引用宏变量的值。

用一个百分号(%)加宏名称就可以调用该宏。

%macro 宏变量名:定义宏变量

%DO :条件处理至一个匹配的%END出现

%If-%Then /%Else :有条件执行宏

10. MERGE语句

用MERGE语句合并SAS数据集。但是,输入数据

集必须预先按该BY变量排序。语句一般形式为:

式为:

DATA 新数据集 ;

MERGE 输入数据集1 输入数据集2 … ;

BY 变量;

RUN;

e.g. 下图展示合并数据集A、B 的结果:

Data gooddata;

Merge stockreturn sample (in=a);

By firm;

If a=1;

Run;

注意:这里merge语句使用了两个选项,当一个SAS

数据步同时读入多个SAS数据集时,可以使用IN=选

项来确定本观测来自哪个数据集,

in=选项的一般形式是:SAS-data-set(IN=variable)。

其中,variable是一个临时的数值型变量;

Variable=0 表示观测不是来自本数据集;

Variable=1表示观测是来自本数据集;

在这里使用IN选项的目的就是把所有来自数据集

sample的观测输出到新数据集gooddata中。

语句

REG过程用来进行回归分析。

在MODEL语句中有许多选项,其中的几个选项如

下:

CLM 回归估计值0.95置信区间的上界和下界。

CLI 因变量预报值的0.95置信区间。

P 由输入数据和回归方程计算预报值。输出观

测序号,ID变量(需事先规定ID语句),实际值,预

报值和残差。如果已规定了CLM、CLI或R,选项P

就不需要了。

R 要求残差分析,输出包括选项P的一切内容

外,还有其它一些分析

12. MEANS语句

MEANS对指定的数值变量进行简单的统计描述。

13. OPTIONS语句

OPTIONS语句临时改变SAS系统的选项设置。

改变后的选项设置在以后的SAS会话或作业中

保持有效,直到再次改变它们。

改变SAS系统选项可以用OPTIONS语句,或

用显示管理命令OPTIONS菜单。

语句格式:

OPTIONS option-1 <...option-n>;

其中:

option规定要改变的SAS系统选项。