第3章 SAS数据步与数据步语句.docx
- 文档编号:1178644
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:32
- 大小:108.13KB
第3章 SAS数据步与数据步语句.docx
《第3章 SAS数据步与数据步语句.docx》由会员分享,可在线阅读,更多相关《第3章 SAS数据步与数据步语句.docx(32页珍藏版)》请在冰点文库上搜索。
第3章SAS数据步与数据步语句
第3章数据步与数据步语句
摘要:
本章讲授数据步的基本概念,数据集的结构,学习数据步构成的有关语句功能及其用法。
对本章内容的学习是进行数据处理的一个前提条件,为后面编程打下基础。
§3.1SAS数据步与数据集
§3.1.1数据步
数据步是产生数据集的一组语句,一个数据步可以建立一个或多个数据集,在一个SAS程序中可以有多个数据步。
数据步程序还可以对已经建立的数据集进行修改和产生输出报告。
一、数据步的基本任务
⒈建立数据集:
SAS按照从数据步各语句中获得的信息建立数据集,该数据集存放输出的数据,故称输出数据集。
DATA语句是数据步开始的标志,且提供数据集名。
格式如下:
DATA数据集名;
⒉输入数据:
把外部数据读入内存,这步取决于外部数据的来源,可分为三种情况。
1从数据步内读取数据(数据源在作业流中):
用INPUT语句与
CARDS语句联合使用
2从磁盘文件读取数据:
用INFILE语句与
INPUT语句联合使用
3从已有的数据集中读取数据:
用SET语句
⒊对数据进行加工:
对数据进行加工处理的语句叫多,后面陆续介绍。
在此仅介绍赋值语句。
赋值语句格式:
变量=算术表达式
变量=字符串
赋值语句功能:
先计算赋值号右边的表达式的值,然后将表达式的值赋给右边的变量。
如:
x=3+6
⒋将组成的观察写入数据集:
在完成数据加工后,将要保存的变量(及数据)组成一例观察值,写入数据集。
该操作用OUTPUT语句来完成。
二、数据步程序的三种结构
根据数据源的不同,数据步程序有如下三种基本结构:
⒈从数据步内读取数据(数据源在作业流中):
当数据源的数据作为程序的一部分出现在程序中时,数据步程序的格式如下:
DATA数据集名;
INPUT变量表;
[其它数据步语句;]
CARDS;
数据块
;
⒉从磁盘文件读取数据(数据源是ASCII码文件):
如果数据源是以ASCII码数据文件存储于磁盘上,SAS可以读取该数据文件中的数据来建立数据集,则数据步具有的格式如下:
DATA数据集名;
INFILE数据文件名;
INPUT变量表;
[其它数据步语句;]
;
执行INFILE语句时,指定的数据文件被打开,INPUT语句从打开的数据文件中读取数据。
⒊从已有的数据集中读取数据:
(数据源是已经存在的数据集)
利用已经建立的数据集中的数据来产生新的数据集,其数据步格式如下:
DATA数据集名;
SET或MERGE或UPDATA语句;
[其它数据步语句;]
;
三、数据步的程序的执行流程
数据步的作用是把数据源中的数据作为输入,经过加工后输出到一个或多个“SAS数据集”。
程序执行流程图如下:
§3.1.2数据集
SAS数据集是一种具有特定专门格式的,且有SAS程序运行产生的,SAS使用的一种数据文件(以二进制形式存放)。
它由数据步产生,作为过程步的输入。
一、数据集的结构
数据集是一个数值的集合,是一个数据值构成的矩形表(二维表)。
观测
变量1
变量2
变量4
…
1
数据值
数据值
数据值
…
2
数据值
数据值
数据值
…
3
数据值
数据值
数据值
…
∶
∶
∶
∶
∶
∶
∶
∶
∶
∶
数据集中的数据是按行列结构存放:
每一行代表调查的每一个个体的信息,称之为:
观测值(Observations样本、记录);
每一列表示一个调查项目,称为变量(Variables);每一列上的数据值称为变量值(Datavalue)。
数据集的基本要素是变量和观测值。
二、数据集的类型
SAS数据集分为两种类型:
临时数据集和永久数据集。
SAS数据集名称由两部分组成。
两部分名称是以“·”为分隔符连接而成的。
其格式如下:
一级名·二级名
⒈临时数据集
当以“WORK”作为一级名,或省略一级名仅使用二级名,则该数据集为临时数据集。
这类数据集在SAS退出时回被系统自动删除。
临时数据集创建方法有两种:
1用户自定义:
用户给定数据集名。
如:
“DATAstudent;”,建立的数据集为Work.student。
2由系统自定义:
由系统指定数据集名。
如:
“DATA;”系统以DATA1,DATA2……等命名。
⒉永久数据集
若想在保存建立的数据集,则需要建立永久数据集。
即一级名不能省略且不为“WORK”的数据集。
SAS数据集名中不能使用真实路径,必须用LIBNAME语句给数据集指定一个别名(逻辑名)。
在DATA语句中,以逻辑名为一级名,就可以建立永久数据集。
SAS系统回自动为永久数据集文件加上“.Sd2”扩展名。
如:
libnamesjm"C:
\sas\SASWORK";
datasjm.student;
inputxh$xm$yygs;
p=yy+gs;
cards;
001aaa8991
002bbb7088
003ccc9092
004ddd7087
005eee8583
procprint;
run;
当程序执行后,在“C:
\sas\SASWORK”文件夹中建立一个名为:
“student.sd2”的永久数据集文件。
§3.2SAS数据步的基本语句
SAS数据步语句是数据步程序设计中经常用到的语句,对其功能与语法的掌握是程序设计的前提条件。
一、DATA语句
1.功能:
DATA语句是数据步开始标记,指定数据集名,为建立数据集作好准备。
数据集名以英文字符开头,长度不超过8个字符。
2.格式:
DATA[数据集名[选项]];
3.说明:
①在DATA语句中,数据集[选项]可以有一个或多个,当有多个时表示一个数据步产生多个数据集。
如:
DATAA,B,C;
②可建立临时数据集或永久数据集;
③SAS保留的专用的数据集名:
_NULL_不产生数据集;
_DATA_以数据步被实行的先后为序,产生二级名为DATA1,DATA2,…,DATAn的数据集。
_LAST_相对与当前数据步,指上一个数据步产生的数据集。
④若不指定数据集名,系统默认为数据集名为:
_DATA_。
4.选项说明:
通过选项的选择,给数据集指定一些特性。
数据集名后可有多个选项,所有选项必须写在同一个圆括号中,不同的选项之间用空格隔开。
常用的选项格式为:
选项关键字=参数
1DROP=变量表将指定的变量不作为数据集变量,即对应数据不写入数据集。
②KEEP=变量表将指定的变量作为数据集变量,即对应数据写入数据集。
③TYPE=类型指定建立特殊类型的数据集,常用的有:
CORR相关矩阵、协方差矩阵COV、DISTANCE距离矩阵。
④RENAME=(旧变量=新变量…)用旧数据集产生新数据集时选用,在新数据集中指定新变量名替换旧数据集中的变量名。
如:
datastudent(dropp);
二、CARDS语句与数据块
1.CARDS语句:
将原始数据直接写在程序中,这是SAS数据源的三种形式之一,其格式如下:
CARDS;
多行用空格隔开的数据
;
其中CARDS语句是数据块的开始,它的功能是通知SAS从下一行开始读取数据。
CARDS语句写在数据步的最后部分。
2.数据块:
数据块是为INPUT语句提供数据的。
可由多行构成,数据间用空格隔开,行数没有限制,每行不超过80列。
一个数据步只能有一个数据块。
3.CARDS4语句:
因分号是作为数据块的结束标记,当数据行中需要“;”作为数据出现时,需将CARDS换成CARDS4语句;同时用连续的四个“;”作为数据块的结束符。
三、INPUT语句
1.功能:
INPUT语句是从数据源(数据块或文件)中读取数据,并将数据赋给其后的变量。
2.格式:
INPUT变量表;
3.说明:
①INPUT语句有四种格式:
列表输入、列输入、格式化输入、指针控制输入。
②“变量表”可以缩写(变量名相同且有序)。
如:
INPUTX1X2X3X4X5;缩写为:
INPUTX1-X5;
4.列表输入(自由格式):
将变量简单的列在INPUT语句之后,变量间由一个或多个空格隔开。
要求:
INPUT语句中列出的变量的顺序必须和输入数据一致。
本格式使用最为简单。
如:
DATAstudent;
inputxh$xm$yygs;
p=yy+gs;
CARDS;
001aaa8991
002bbb7088
003ccc9092
004ddd7087
005eee8583
DATAstudent;
inputyygsxh$xm$;
p=yy+gs;
CARDS;
8991001aaa
7088002bbb
9092003ccc
7087004ddd
8583005eee
①通常数据源中每行数据的个数与INPUT语句中变量个数相等,若一行中数据多于变量个数,则多余数据被忽略;反之,一行中数据少于变量个数,未获得数据的变量将从下一行读取数据。
比较以下两个例子:
(见下页)
②缺失项必须用“.”表示。
③变量与对应的数据类型不匹配时,变量值为缺值。
DATAnew;
Inputabc;
Cards;
123
456
DATAnew;
Inputabc;
Cards;
1234
567
DATAnew;
Inputabc;
Cards;
12
3456
5.列输入:
在INPUT语句中,指定每个变量值所在的列号。
当变量的值在数据源中位于相同的列上时,用列输入比较方便。
1格式:
INPUT变量起始列-终止列 …;
例如:
INPUTxh$7-9xm$11-13yy15-17gs19-21;
2采用列输入时,变量顺序不必与输入数据一致。
3要求变量的值在数据源中位于相同的列上。
6.格式化输入:
在INPUT语句中给出变量的数据类型和长度的这样一种数据读如格式。
1格式:
INPUT变量格式 …;格式——>:
W.[d]
例如:
INPUTxh$.yy5.3;
aaa3.123
2适于日期型数据的输入(参见P21)
例如:
INPUTxh$7-9xm$11-13yy15-17gs19-21;
7.指针控制读入数据:
SAS中指针有“@”、“#”、“/”、“+”、“-”等控制符。
①行保持说明符(续行符)“@”:
保持数据指针在当前行上,直到读完所有数据;数据指针才移到下一行。
如:
@:
在INPUT语句末尾使用@符号,其作用是:
保持数据指针在当前行上,下一个INPUT语句接着从本行读入数据,直到数据步结束,数据指针才移到下一行。
如:
DATAnew;
Inputab;
Inputc;
Cards;
1234
4567
procprint;
run;
DATAnew;
Inputab@;
Inputc;
Cards;
1234
4567
procprint;
run;
@@:
在INPUT语句末尾使用连续@@符号,其作用是:
保持数据指针在当前行上,直到读完所有数据;数据指针才移到下一行。
如:
DATAnew;
Inputab;
Cards;
12
34
56
DATAnew;
Inputab@@;
Cards;
123
567
DATAnew;
Inputabc@@;
Cards;
12
3456
其运行结果是相同的。
@:
@后跟一个数值n,其作用是:
将数据指针移到n列。
如:
INPUT@4age。
②+和-控制符:
利用“+”和“-”可以控制数据指针向前或向后移动指定的列数。
③#和/控制符:
对数据指针的控制。
(见P22)
#:
后跟一个数值n,表示将数据指针移到指定的行读取数据。
/:
用/控制符将数据指针移到下一行开始读取数据。
四、OUTPUT语句
1.功能:
将当前数据集的观察值输出到OUTPUT语句指定数据集中。
2.格式:
OUTPUT[数据集名]
3.建立数据集的两种方式:
1自动方式:
在数据集中不出现OUTPUT语句,当执行完最后一个数据步语句后,系统自动将当前观察值写入数据集,使数据集中增加一个观察值。
2OUTPUT语句方式:
在数据步中出现OUTPUT语句,通过该语句将当前观察值写入指定的数据集。
在一个数据步中,可以有多个OUTPUT语句,其功能是将当前观察值写入不同的指定数据集。
4.OUTPUT语句的特殊用法:
1读如数据源中一行数据,可以建立特殊的数据集。
DATAnew;
Inputx1x2x3;
y=x1;output;
y=x2;output;
y=x3;output;
cards;
123
456
PROCprint;
RUN;
2用数据源的部分数据产生数据集。
3用同一个数据源数据产生几个不同数据集。
DATAnewanewb;
inputname$agescore@@;
ifage<=30thenoutputnewa;
elseoutputnewb;
cards;
zhangsan2889lisi4585wangwu2579liming5999
PROCprintdata=newa;
PROCprintdata=newb;
RUN;
五、赋值语句
1.功能:
将表达式的值赋给变量。
2.格式:
变量=表达式
DATAnew;
inputx@@;
y=x**2;
cards;
12345
PROCprint
RUN;
六、KEEP语句
1.功能:
用于保存某些变量。
当需要将某些变量值写入数据集时可使用该语句指定。
2.格式:
KEEP变量表;
datanew;
inputx1-x5;
y=sum(ofx1-x5);
keepyx4x5;
cards;
1112131415
2122232425
procprint;
run;
七、DROP语句
1.功能:
DROP语句可用语数据步任何地方,用于删除某些变量。
当不需要将某些变量值写入数据集时可使用该语句指定,未指定的变量值将被写入数据集。
2.格式:
DROP变量表;
datanew;
DROPx1x2;
inputx1-x5;
y=sum(ofx1-x5);
Z=X1+X2;
cards;
1112131415
2122232425
procprint;
run;
八、DELETE语句
1.功能:
用于删除观察值,使系统停止处理当前的观察值,且该观察值不被写入正在建立的数据集中,同时使系统返回到数据步的开始处进行下一次执行。
通常与选择语句组合使用,实现有目的输出数据集。
2.格式:
DELETE;
dataaa;
inputxh$x1x2;
y=x1+x2*0.7;
ify<60thendelete;
cards;
0012565
0022470
0031435
0042680
0052345
procprint;
run;
九、累加语句
1.功能:
对某一变量求累加值。
2.格式:
变量+算术表达式
3.说明:
1先计算表达式的值,再将变量的当前值与表达式的值相加,然后将相加的结果赋给变量。
(类似高级语言x=x+n)。
2变量为数值型变量,第一个观察值未读入前,该变量值为0;
3若计算为缺失值时,变量值作为0处理。
datanew;
inputname$salary@@;
salary+salary*0.05;
cards;
aaa700
bbb500
ccc1000
procprint;
run;
§3.3信息与格式语句
一、MISSING语句
1.功能:
指定数值型缺失值的文字描述。
2.格式:
MISSINGvalues;
datanew1;
missingrwb;
inputnumpatch@@;
cards;
100r1015
102w1038
104b
procprint;
run;
二、LABEL语句
1.功能:
定义变量的输出标题。
2.格式:
LABEL变量=”标题”。
DATAstudent;
labelxh="学号"xm="姓名";
inputxh$xm$yygs;
p=yy+gs;
CARDS;
001aaa8991
002bbb7088
003ccc9092
004ddd7087
005eee8583
procprintlabel;
run;
3.说明:
当使用LABEL语句定义变量标题后,在输出时需要在PRINT过程调用时应加label选择项,这样才能将定义的变量的标题打印出来。
三、LENGTH语句
1.功能:
定义变量的长度。
2.格式:
LENGTH变量长度;
DATAnew;
LENGTHx$16y$10;
INPUTxyz;
CARDS;
shaanxiyanglingzhangsan8861
nixiayinchuanwangwu199957
PROCPRINT;
RUN;
四、FORMAT语句
1.功能:
用于定义变量的输出格式。
(用法参见P26、P27)
2.格式:
FORMAT变量输出格式…;
输出格式:
①数值型变量:
W.和W.DGS2.Z3.1
②字符型变量:
$W.
③日期型变量:
MMDDYYw.、YYMMDDw.、DDMMYYw.
DATEw.TIMEw.DateTtimW.
五、INFORMAT语句
1.功能:
用于定义变量的输输入格式。
(用法参见P26、P27)
2.格式:
INFORMAT变量输入格式…;
输入格式:
①数值型变量:
W.和W.D
②字符型变量:
$W.
③日期型变量:
MMDDYYw.、YYMMDDw.、DDMMYYw.
DATEw.TIMEw.DateTtimW.
六、ATTRIB语句
1.功能:
用于定义(设置)指定变量的属性,即指定变量的输入格式、输出格式、标签、变量长度。
2.格式:
ATTRIBFORMAT=输入格式
INFORMAT=输出格式
LABEL=”标题”
LENGTH=长度…;
例如:
单个变量和单个属性设置:
Attribcostlength=4;
单个变量和多个属性设置:
Attribsaledayinformat=mmddyy.format=worddate.;
多个变量与多个相同属性设置:
Attribxylength=$4label='TESTVARIABLE';
多个变量与不同属性设置:
Attribxlength=$4label='TESTVARIABLE';
ylength=$2label='RESPONSE';
缩写变量表与单个属性设置:
Attribmonth1-month12label='MONTHLYSALES';
§3.4SAS数据步的控制语句
在处理实际问题是,往往需要根据不同条件,对不同数据进行不同处理;或者需要重复执行某些语句,这就需要有专门的语句来控制实现这些功能,称这些语句为控制语句。
SAS提供了复合、条件、多项选择、转向、循环等多种控制语句。
§3.4.1选择语句
一、复合语句
1.格式:
DO
语句1;
语句2;
…;
语句N;
END
2.功能:
将多个语句作为一个语句单位。
在执行时,复合语句作为一个整体,其中的每一条语句依次被执行。
该语句常用于条件、多项选择、循环等语句中。
二、IF语句
1.格式:
IF(条件)THEN语句1;[ELSE语句2;]
2.
功能:
根据条件成立与否选择执行语句1或语句2。
当条件成立时,执行语句1;否则执行语句2。
3.说明:
①条件可为数值表达式、关系表达式或逻辑表达式,系统首先计算数值表达式、关系表达式、或逻辑表达式的值。
②数值表达式的值为零、非零、或缺值,SAS规定非零结果为“真”,零或缺值为“假”。
③关系表达式、逻辑表达式的值为:
“真”或“假”。
例如:
DATAnew;
INPUTname$score@@;
IF(score>80)thengrade='A';
IF(60<=scoreANDscore<=80)thengrade='B';
IF(score<60)thengrade='C';
CARDS;
Zhangsan75lisi90wanwu55
PROCPRINT;
RUN;
例如:
DATAnew;
inputscore@@;
if(score<60)then
do;
m+1;
mark="****";
end;
elsemark="pass";
cards;
657534936756
procprint;
run;
三、SELECT语句
1.格式:
SELECT[(测试表达式)]
WHEN表达式1语句11;
WHEN表达式2语句2;
…;
WHEN表达式N语句N;
[OTHERWISE语句N];
END
2.功能:
用于实现多分支选择。
3.说明:
①执行过程:
程序执行时,按照书写顺序从上到下判断条件,执行条件先满足的语句后,结束整个SELECT语句,属于多种选一的情况。
②不管有几个分支的条件,程序执行了一个分支后,其余分支不再执行;
③当多分支中有多个表达式同时满足时,则仅执行第一个满足条件的语句。
④当有测试表达式时,首先计算测试表达式的值,而后将测试表达式的值按顺序与WHEN之后的表达式的值进行比较。
若相等,则执行其后的语句,然后整个SELECT语句执行结束;若不相等,按顺序再与下一个WHEN之后的表达式的值进行比较。
⑤无测试表达式时,按顺序计算WHEN之后的表达式的值。
若值为“真”、“非零”,则执行其后的语句,然后整个SELECT语句执行结束;否则,按顺序处理下一个WHEN之后的表达式的值。
例如:
DATAnew;
INPUTname$score@@;
SELECT;
WHEN(score>80)grade='A';
WHEN(60<=sc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 SAS数据步与数据步语句 SAS 数据 语句