SAS.docx
- 文档编号:10484646
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:21
- 大小:57.95KB
SAS.docx
《SAS.docx》由会员分享,可在线阅读,更多相关《SAS.docx(21页珍藏版)》请在冰点文库上搜索。
SAS
第一章SAS系统概况
SAS系统是一个模块化的集成软件系统。
SAS系统提供的二十多个模块(产品)可完成各方面的实际问题,功能非常齐全,用户根据需要可灵活的选择使用。
●BaseSAS
BaseSAS软件是SAS系统的核心。
主要功能是数据管理和数据加工处理,并有报表生成和描述统计的功能。
BaseSAS软件可以单独使用,也可以同其他软件产品一起组成一个用户化的SAS系统。
●SAS/AF
这是一个应用开发工具。
利用SAS/AF的屏幕设计能力及SCL语言的处理能力可快速
开发各种功能强大的应用系统。
SAS/AF采用先进的OOP(面向对象编程)的技术,是用户可方便快速的实现各类具有图形用户界面(GUI)的应用系统。
●SAS/EIS
该软件是SAS系统种采用OOP(面向对象编程)技术的又一个开发工具。
该产品也称
为行政信息系统或每个人的信息系统。
利用该软件可以创建多维数据库(MDDB),并能生成多维报表和图形。
●SAS/INTRNET
●SAS/ACCESS
该软件是对目前许多流行数据库的接口组成的接口集,它提供的与外部数据库的接口是透明和动态的。
第二章BaseSAS软件
第一节SAS编程基础
SAS语言的编程规则与其它过程语言基本相同。
SAS语句
一个SAS语句是有SAS关键词、SAS名字、特殊字符和运算符组成的字符串,并以分
号(;)结尾。
注释语句的形式为:
/*注释内容*/或*注释内容。
二、SAS程序
一序列SAS语句组成一个SAS程序。
SAS程序中的语句可分为两类步骤:
DATA步和PROC步。
这两类步骤是所有SAS程序的模块。
通常用DATA步产生SAS数据集,而用PROC步对SAS数据集内的数据进行分析处理并输出结果。
SAS程序是在Editor窗口采用全屏幕编辑方式输入。
当程序输入完毕后,就可以提交给SAS系统执行,在菜单中选择Submit或按F3键都可以运行程序,也可以只提交一部分语句。
LOG窗口显示程序执行过程中记录的信息,它包括执行的语句,生成的数据集中变量的个数及记录的个数,每一步花费的时间及出错信息等。
SAS过程产生的输出显示在OUTPUT窗口。
SAS数据集
SAS数据集相当于其它数据库系统的表(Table);每一行称为一个观测,相当于其它数
据库系统的一条记录;每一列称为一个变量。
SAS的变量只有两种类型:
数值型和字符型;变量的长度缺省时为8个字节,用关键字LENGTH定义变量长度;可以对变量的输入、输出格式进行定义,用关键字INFORMAT、FORMAT来分别定义;还可以给变量加标签,标签是一个代替变量名的描述性标识,可以在一些确定的SAS过程中代替变量名被打印出来,用关键字LABEL定义。
SAS数据集在系统中以文件的形式存在,扩展名是.sas7bdat。
每次启动SAS系统后,系统自动开辟一个库名为WORK的临时存贮区,用来存贮DATA
步或其它过程生成的临时数据集。
一旦退出SAS系统,这个临时存贮区就被删除,其中所有的临时数据文件也被删除。
为了创建永久的数据集,必须给这个数据集规定存贮的地方和名字两部分,第一部分称为库标记或逻辑库名(Libref),它总是使用LIBNAME语句把库标记和一个目录联系起来,用来指示数据集存贮的地方。
例如:
libnamedevelop‘d:
\projects\develop\data’
develop.t_itemsum表明数据集t_itemsum存贮在‘d:
\projects\develop\data’目录下。
tmp或work.tmp表明数据集tmp存贮在临时存贮区中。
SAS表达式和SAS函数
SAS语言的表达式与其它过程语言略有不同。
SAS语言中数值型变量的缺失值是一个小数点(.),字符型变量的缺失值是空(′′)。
在一个四则运算的表达式里面,如果有一个缺失值,那么整个运算的结果就是’.’;如果用户不想让缺失值参加算术运算,可使用SAS的样本统计函数,如SUM(),MEAN()等。
如果除法运算的除数为0,那么运算的结果也是’.’。
表示时间的变量在数据集里经常被定义为数值型,0代表的是1960年1月1日,1代表
的是1960年1月2日,-1代表的是1959年12月31日,以此类推。
我们可以用FORMAT定义时间的输出格式,如:
yymmdd10.这种格式显示的时间形式如’2001-05-01’。
时间常数可以表示成'01MAY2001'd的形式,如:
ifoccdate=’01MAY2001’d。
算符’||’连接两个字符值,连接算付不清里开头和结尾的空格,如:
如果itemid=’622’,itemname=’逾期贷款’,那么itemid||‘.’||itemname=’622.逾期贷款’。
如果要去掉空格,就要使用SAS函数TRIM和LEFT,trim(left(itemid))||‘.’||trim(left(itemname))=’622.逾期贷款’。
下面是一些常用的函数:
字符函数:
TRIM(s):
去掉s尾部空格;
LEFT(s):
字符串s的表示式采用左对齐,即去掉s开头的空格;
SUBSTR(s,p,n):
从字符串s中的第p个字符开始抽取n个字符的子串。
LENGTH(s):
给出字符串s的长度;
INDEX(s,s1):
搜寻字符串s1在字符串s中的位置;
INPUT(s,informat):
字符s的输入格式为informat,如:
INPUT(‘1960-01-01’,yymmdd10.)=0;
PUT(s,format):
将s按format的格式输出,如:
PUT(0,yymmdd10.)=’1960-01-01’,结果一定为字符型;
SYMPUT(‘x1’,x2):
把x2的值赋给宏变量x1
SYMGET(‘x’):
取得宏变量x的值;
时间和日期函数:
DATE():
取当前日期;
DATETIME():
取当前日期和时间;
YEAR(date)、MONTH(date)、QTR(date)、DAY(date):
分别取date表示的年、季度、月份、日。
INTX(in,from,nu):
按给定的时间间隔in—年(year)、季度(qtr)、月份(month)、日(day),从日期from,推算出nu个时间间隔后的日期的第一天。
如:
PUT(INTNX(‘qtr’,INPUT(’1960-02-01’,yymmdd10.),2),yymmdd10.)=’1960-07-01’
第二节DATA步(数据步)
DATA步是用DATA语句开始的一组SAS语句,用来创建SAS数据集。
本小节将介绍一些在DATA步中常用的SAS语句。
创建SAS数据集及输出文件或报表
1.数据在作业流中
就是用SAS语句从作业流中输入数据来产生SAS数据集。
一般的形式为:
DATA语句;/*给出要产生的数据集的名字*/
INPUT语句;/*对每个变量给出名字及类型*/
(用于DATA步的其它SAS语句)
CARDS;/*标志数据行开始*/
[数据行]
;
例:
datatmp;
inputsex$x1-x3;
cards;
F123
M456;
2.数据来自外部文件
从磁盘上读入数据文件产生SAS数据集。
一般的形式为:
DATA语句;/*给出要产生的数据集的名字*/
INFILE语句;/*打开包含数据的外部文件*/
INPUT语句;/*对每个变量给出名字及类型*/
(用于DATA步的其它SAS语句)
RUN;
例:
datatmp;
infile‘c:
\f1.dat’;
inputsex$x1-x3;
z=(x1+x2+x3)/3;
run;
3.数据来自其他SAS数据集
由已存在的数据集创建新的数据集。
DATA语句;/*给出要产生的数据集的名字*/
SET|MERGE|UPDATE|MODIFY语句;/*给出已存在的数据集的名字*/
(用于DATA步的其它SAS语句)
RUN;
例:
datatmp;
settmp;
ifsex=’F’;
run;
4.把SAS数据集转换为外部数据文件或输出报表
产生外部数据文件或在打印机上输出报表。
DATA_NULL_;/*_NULL_意味着不产生数据集*/
INPUT和CARDS|INFILE语句
或者SET|MERGE|UPDATE|MODIFY语句;/*为输出提供数据*/
FILE语句;/*输出报表或存贮文件*/
PUT语句;/*要输出的变量*/
(用于DATA步的其它SAS语句)
RUN;
例:
data_null_;
settmp;
file‘c:
\f1.dat’;(或者file‘prn’;)
putx1x2;
run;
二、DATA步流程
NO
YES
(图) 在DATA步内部运行的流程图
三、用在DATA步的文件操作语句
1.DATA语句和SET语句
DATA语句表示一个数据步的开始,并给出正在创建的数据集的名字。
SET语句给
出用来创建新的数据集的已存在的数据集的名字。
例:
datayear1999year2000year2001;
setyearqtrmonth;
ifyear=1999thenoutputyear1999;
elseifyear=2000thenoutputyear2000;
elseifyear=2001thenoutputyear2001;
run;
2.MERGE语句(合并语句)
MERGE语句是把两个或两个以上的数据集中的观测合并为新生数据集中的一个
观测。
例:
datadata3;
mergedata1(in=in1)data2(in=in2);
byx1;/*数据集必须先按变量x1排序*/
ifin1andin2;/*变量x1取当前值的观测在data1和data2中都存在*/
run;
3.UPDATE语句(更新语句)
UPDATE语句是用一个修改数据集中的观测来修改一个主数据集。
例:
datanew;
updateoldmastertrans;
byid;/*数据集必须先按变量id排序*/
run;
4.BY语句
BY语句在DATA步中用以控制SET,MERGE,UPDATE或MODIFY语句的操作,并且建立特殊的分组变量。
例:
procsortdata=degress;
bystatecity;
run;
在DATA步中,SAS系统对每个BY组(含有BY值的所有观测组成一个BY组)创建两个临时变量:
FIRST.variable和LAST.variable,他们用来区别每个BY组的第一个和最后一个观测。
当某个观测在BY组中是第一个观测时,FIRST.variable的值置为1;而这个BY组的其它所有观测的FIRST.variable的值为0。
类似地,当某个观测在BY组中是最后一个观测时,LAST.variable的值置为1;而这个BY组的其它所有观测的LAST.variable的值为0。
用在DATA步的运行语句
5.DELETE语句(删除语句)
DELETE语句告数SAS系统停止处理当前的观测。
这个观测不会被输出到正被创
建的数据集中,而且系统返回到这个DATA步的开头处理其它观测。
例:
datatmp;
settmp;
ifsex=’F’thendelete;
run;
6.STOP语句(停止语句)
用来停止处理当前的DATA步,正被处理的那个观测没有添加到数据集上。
例:
dataout;
setin;
if_n_=11thenstop;/*生成的数据集中将只包含10个观测*/
run;
7.WHERE语句
从输入数据集中读满足条件的观测进行处理。
例:
dataout;
setin;
wheresex=’F’;
run;
8.OUTPUT语句(输出到数据集语句)
OUTPUT语句告诉SAS系统输出当前的观测到正被创建的数据集中。
例:
dataout1out2;
setin;
ifsex=’F’thenoutputout1;
ifsex=’M’thenoutputout2;
run;
用在DATA步的控制语句
9.DO语句(循环语句)
5.简单DO语句
ifx<5thendo;
x=x-5;
y=y+5;
end;
6.循环DO语句
doI=1to5do;
x=x-5;
y=y+5;
end;
7.DOWHILE语句
dowhilex<5;
x=x-5;
y=y+5;
end;
8.DOUNTIL语句
dountilx>=5;
x=x-5;
y=y+5;
end;
10.SELECT语句(选择语句)
例:
select(x);
when(0)put‘x=0’;
when
(1)put‘x=1’;
otherwiseput‘x=-1’;
end;
或写成下面的形式:
select;
when(x=0||x=1)put‘x=’x;
otherwiseput‘x=-1’;
end;
11.IF语句(条件语句)
例:
ifx=1thendo;/*当条件成立时,执行下面一个DO组*/
x=0;
put‘x=0’;
end;
elsedo;/*当条件不成立时,执行下面另一个DO组*/
x=1;
put‘x=1’;
end;
用在DATA步的信息语句
12.FORMAT语句(格式语句)
规定变量的输出格式。
例:
data_null_;
a=0;
b=1000000.00;
formatadata7.
bcomma16.2;
putab;
run;
程序执行结果在LOG窗口输出:
01JUN19601,000,000.00;
13.LENGTH语句(长度语句)
定义数据集中变量的名称、类型和长度
例:
datanew;
lengthab$10cd8;
stop;
run;
创建一个新的数据集new。
含有四个变量,a和b是字符型,长度为10个字节;c和d是数值型,长度为8个字节。
数据集中没有观测。
即使不是用LENGTH语句,DATA步中的任何一个赋值语句左边的变量也会被作为正被创建的数据集中的一个变量被输出到数据集中。
例:
datanew;
lengthx8;
doI=1to5;
x=I;
output;
end;
run;
生成的数据集new中有五个观测和两个变量x、i。
14.LABEL语句(标签语句)
对变量给出标签。
这个标签在SAS数据集中同变量名一起被存贮,而且可以通过许多SAS过程被打印输出。
例:
labeloccdate=’数据日期’
unitname=’分行名称’;
15.DROP语句(删掉变量语句)
用来规定不包含在SAS数据集中的变量。
例:
datanew(drop=a);
setold(drop=b);
run;
如果数据集old中含有变量a,b,c,那么数据集new中只含有变量c。
16.KEEP语句(保留变量语句)
用来规定包含在SAS数据集中的变量。
例:
datanew(keep=ab);
setold;
run;
不管数据集old中含有几个变量,数据集new中只含有变量ab。
17.RENAME语句(换名语句)
例:
datanew(rename=(x1=y1x2=y2));datanew;
setold;setold;
x1=x1-5;等价于:
renamex1=y1x2=y2;run;x1=x1-5;
run;
因为上面的例子中变量的新名字在输出数据集中才起作用,在当前的DATA步的程序语句中应仍使用老名字。
而在下面的例子中,应使用新名字:
datanew;
setold(rename=(x1=y1x2=y2));
y1=y1-5;
run;
18.RETAIN语句(保留语句)
该语句使得变量值在DATA步从当前这次到下一次重复时被保留。
例:
datanew;
setold;
lengthsum8;
retainsum;
if_n_=1thensum=x;
elsesum=sum+x;
run;
在新的数据集中增加变量sum,sum的值等于第一条观测到当前观测的变量x的值
的累加。
如果没有retain语句,那么第一条观测以后的sum值均为缺失值。
第三节全程语句
全程语句可以用在SAS程序的任何地方。
1.FILENAME语句(文件名语句)和%INCLUDE语句
FILENAME语句用文件标记指示一个外部文件的全名字(目录加上文件名)。
%INCLUDE语句被用来取出SAS语句和数据行,相当于其它语言中的子程序调用。
例:
filenamecountd:
\projects\develop\pgm\count.sas;
%includecount;/*执行程序d:
\projects\develop\pgm\count.sas*/
第四节PROC步(过程步)
PROC步是用PROC语句开始的一组或几组SAS语句。
在PROC步,可以通过过
程的名字来调用过程—一个已经为你写好的程序。
下面介绍一些常用的SAS过程:
1.SQL过程(结构查询语言过程)
将用结构化查询语言编写的SQL语句放到SAS系统的PROCSQL语句的后面,不需要
使用RUN语句,当你提交该过程后,SQL语句便被执行。
例:
procsql;
createtablenewas
selectx,y,z
fromold
wherex>0;
2.SORT过程(排序过程)
SORT过程常用于将数据集分类排序,以便其他SAS过程通过使用BY语句可以直
接调用它,在对SAS数据集进行合并和更新之前,也必须先进行分类排序。
例:
procsortdata=develop.t_accinfoout=project_infonodupkey;
byunitiddescendingprojectid;
run;
该过程对数据集develop.t_accinfo先按unitid的升序排列,在每一个unitid组里面再按projectid的降序排列,生成数据集project_info,nodupkey表示删除by值相同的观测。
如果没有指定out=数据集,则将排序后的结果输出到原来的数据集中。
3.APPEND过程(附加过程)
该过程将一个SAS数据集的观测附加到另一个SAS数据集的后面。
如果用DATA步去连接两个数据集,SAS系统必须在处理完两个数据集中的所有
观测后再产生一个新的数据集。
APPEND步避免处理原始数据集中的数据,直接把新
观测添加到原始数据集的后面。
例:
procappendbase=olddata=new;
run;
该过程用于将DATA=数据集中的观测添加到BASE=的数据集中。
如果两个数据集中的变量名称或长度不同,要在PROC语句中加FORCE选项。
4.DATASETS过程(数据库管理过程)
该过程用于对SAS数据库中的SAS文件进行列表、拷贝、换名、添加和删除等操
作。
5.CONTENTS过程(内容过程)
该过程提供SAS数据库中关于SAS文件的有关信息。
如:
文件的名称、类型、创
建时间、修改时间、观测数、变量、索引等。
并自动输出到OUTPUT窗口。
可以用OUT=数据集将信息输出到一指定的数据集中。
例:
proccontentsdata=develop.t_unitdefout=info;
run;
6.FORMAT过程(定义格式过程)
在SAS系统中,用户可以使用PROCFORMAT过程定义自己的格式。
各是可以被
赋予:
●单个数字:
procformat;
valuesexfmt1='Female'
2='Male'
other='Miscoded';
run;
●某一数字范围:
procformat;
valueboardfmtlow-49='BelowAverage'
50-99='Average'
100-high='AboveAverage';
run;
●字符、字符串或某一范围的字符
procformat;
value$grade'A'='Good'
'B'-'D'='Fair'
'E','F'='Poor'
other='Miscoded';
run;
7.SUMMARY过程(概括过程)
例:
procsummarydata=personalnway;
classsex;
varsalary;
outputout=personal(drop=_freq__type_)sum=salary;
run;
该过程按sex的值分组,对每组的salary的值求和。
8.TABULATE过程(制表过程)
PROCTABULATE过程可以产生格式化的汇总表格。
最简单的TABULATE过程必
须定义下列要素:
●CLASS语句定义分类变量
●VAR语句定义分析变量
●TABLE语句定义表格的结构和格式(操作符:
逗号—转另一维,空格—表格连排,星号—交叉组合分组)
例:
proctabulatedata=personal;
classsex;
varsalary;
tablesex,
salary*mean;
run;
将输出如下的表格:
salary
mean
sex
52.00
F
M
55.00
第五节SAS宏功能
一、SAS宏变量
定义宏
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS
![提示](https://static.bingdoc.com/images/bang_tan.gif)