SAS语句.docx
- 文档编号:6094683
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:55
- 大小:59.87KB
SAS语句.docx
《SAS语句.docx》由会员分享,可在线阅读,更多相关《SAS语句.docx(55页珍藏版)》请在冰豆网上搜索。
SAS语句
sas有两种语句:
数据步和过程步。
在sas中,通过数据步和过程步来使用sas语言的元素。
数据步:
是一组语句组合:
从外部文件中读取数据;将数据写入到外部文件中;读取sas数据文件和视图;创建sas数据文件和视图。
过程步:
对sas数据集进行分析和产生报表。
例如:
对数据集进行分析、画图、查询和打印等操作。
逻辑库:
由一组sas文件组成。
sas软件系统的信息组织有两层,第一层是sas逻辑库,第二层是sas文件。
sas逻辑库是一个逻辑概念,本事并不是物理实体,它对应的实体是操作系统下一个文件夹或几个文件夹中的一组sas文件。
sas逻辑库是一组存储在同一目录下被同一引擎访问的文件,其他文件也可以存放在该目录下,但是只有能被sas识别的文件才能显示在逻辑库中。
建立sas逻辑库:
用libname语句
libnamelibref
其中libref是逻辑库名,sas-data-library是逻辑库对应的物理地址,engine:
引擎名称。
libnameresdat'D:
\resdat';--创建逻辑库resdat,对应的物理文件夹为D:
\resdat
libnamea('d:
\resbd\','d:
\resfin\');--多个文件夹创建一个sas逻辑库
临时逻辑库;指它的内容只在启动sas时存在,退出sas时内容完全被删除。
系统默认的临时逻辑库为work,引用临时库中的文件时,可以不加库名work。
永久逻辑库:
它的内容在sas关闭对话之后仍旧保留,直到再次修改或删除。
sas除了work以外的逻辑库都是永久库。
引用永久逻辑库的文件时必须加上
永久逻辑库名。
例如:
sashelp.Abmfolder
库引擎:
是一组规定格式想逻辑库读写文件的内部命令。
每个sas逻辑库都对应一个库引擎。
sas逻辑库引擎是软件的一个元件用来组建sas与sas逻辑库之间的接口。
库引擎功能:
读取和写入数据;列出库中的文件;删除和重命名文件。
数据集分类:
sas数据集有两类:
sas数据文件;sas数据视图。
sas数据文件同时描述信息和存储数据值,而sas数据视图则并不实际上存储数据,实际上sas数据视图就是一个查询语句。
这个查询语句建立了一个逻辑数据集,每次打开sas数据视图就相当于运行了一次查询语句。
注意:
这两个数据文件在同一级目录或逻辑库下不能同名。
数据集构成:
描述信息,数据值。
数据文件:
sas数据文件是包含描述信息和数据值的sas数据集。
普通的sas数据文件:
sas格式的数据文件。
接口数据文件:
以其它数据软件格式储存数据的数据文件。
sas数据文件和sas数据视图最大区别就数据文件实际储存数值,视图只是包含表的描述信息以及一组用来读取数据的查询语句,并不实际存储数据。
数据文件是静态的,而视图则是动态的;视图每次打开就相当于运行了异常查询语句,只有数据源发生变化,打开试图就会发生变化,而数据文件
只有自身被修改时才会发生改变。
sas视图:
nativeview:
由数据步或SQL过程创建
interfaceview:
由sas软件创建。
数据步视图:
包含用于从多个数据源中读取数据的数据步程序:
原始数据文件;sas数据文件;procsql视图;sas/access视图
定义格式:
data数据集名称/view=数据集名称;
...
sas语句;
....
run;
上面的定义中,在data步中的最后一个数据集名称后加上"view=数据集名称",告诉sas程序进行编译,但不运行,而被编译的程序编码则
储存在view后的数据视图中。
例如:
创建数据步视图:
dataresdat.class1/view=resdat.class1;
setresdat.class;
run;
procsql视图:
是一个带有名称的procsql查询。
它可以读写的数据源同数据步视图。
例如:
procsql;
createviewresdat.easselect*fromresdat.class;
quit;
表词典:
是一个包含多个sas系统信息的sas数据视图。
下面是一个使用procsql查询表词典的例子:
procsql;
selectlibname,memname,memtype,nobsfromdictionary.tableswherelibname='CE1';
quit;
使用procsql来查询所需要的表词典,这些表储存在dictionary逻辑库中。
输入输出格式:
$指定为字符格式,如果该项空缺,则默认是数值格式;
format:
规定有效sas输出格式;
informat:
规定有效sas输入格式;
w:
设定输入输出的长度,一般是数据所占的列的数目;
d:
设定数值数据中小数点的位数;
sas系统选项:
optionsoption(s); --option设定一个或多个系统选项。
optionsobs=5; --取数据集的前5个观测(行),obs:
observations
sas常数:
数值常数;常见的数字:
标准格式:
1,-1;科学计数法:
1.1e11;十六进制格式:
1cx,12x,9x;x表示为十六进制
字符常数:
用单引号括起来,如果字符常数内含有引号,引用时,要么它的引号用两个连续的单引号,要么用一个双引号。
日期时间常数:
要使用相应的格式值,格式值带单引号,后面跟一个d(日期),t(时间),dt(日期时间)'01jan00'd;'9:
25't,'12jan02:
9:
27:
00'dt
十六进制字符常数:
'533'x,x紧跟在引号部分后面。
data;
x='good';
y='morning';
z=x||y;/*连接算符||,<>取最大,><取最小*/
putz;
run;
goodmorning
NOTE:
ThedatasetWORK.DATA38has1observations(观测)and3variables(变量).
NOTE:
DATAstatementused(Totalprocesstime):
realtime 0.01seconds
cputime 0.00seconds
sas变量:
数值变量,字符变量
数值变量是以浮点(floating-point)方式存储的数据变量,数值变量包括日期和时间.数值变量的值只能是数值。
字符变量名后跟一个美元符($):
表示该变量是字符型而不是数值型。
sas变量属性:
包括长度,输入输出格式和标签。
创建变量:
使用赋值语句;使用input语句;使用format语句或informat语句;使用length语句;使用attrirb语句
使用赋值语句:
如果等号左边的变量不存于数据集中,则赋值语句会产生一个新的变量
使用input语句:
inputx$;
format和informat分别设定变量的输出和输入格式。
变量类型转化:
字符自动转化为数值
data;
x=1;
y='10';
z=x+y;
putz;
run;
input函数:
input(数据源,输入格式)将字符转化为数值
data;
y=input('5688',$3.);
puty;
run;
数值能自动转化为字符:
data;
x='10';
y=10;
x=y;
putx;
run;
NOTE:
Numericvalueshavebeenconvertedtocharactervaluesattheplacesgivenby:
(Line)
Column).
put函数将数值转化为字符:
put(数据源,输出格式):
data;
x=3888.00;
y=put(x,8.3);
puty; --结果是3888.000
run;
data;
x=put('28000.00',$3.);
putx; --结果是280
run;
data;
x=put('280.00',$5.);
putx; --结果是280.0(五位数,包括小数点)
run;
sas自动变量:
由数据步语句自动创建的。
_n_:
观测序号;_error_错误信息变量;_numeric_所有数值变量;_character_所有字符变量;
_all_所有变量;fisrt.variable同一by组第一个观测;last.variable同一by组最后一个观测;
日期时间函数:
data;
x=date();
y=today();
formatxyyymmdd10.;
putx=y=;
run;
结果是x=2004-11-07y=2004-11-07
data_null_;
sdate='01jan2002'd;
edate='01jan2003'd;
actual=datdif(sdate,edate,'act/act'); --按照每个月的实际天数算
days30=datdif(sdate,edate,'30/360'); --按照每个月30天算
putactual=days30=;
run;
结果是:
actual=365days30=360
data;
n=datetime();
putn=;
x=datetime();
putx=;
formatxdatetime20.4;
y=datetime();
puty=;
formatynldatm20.;
m=time();
putm=;
z=time();
putz=;
formatzhhmm8.2;
run;
结果是:
n=1415483760.8
x=07NOV04:
21:
56:
00.843
y=04-11-7下午09:
56
m=78960.843
z=21:
56.01
data;
h=hour(datetime());puth=; --计算当天时间的小时数
m=minute(datetime());putm=; --计算当天时间的分钟数
run;
结果是:
h=21
m=58
data;
mdy=mdy(08,18,2001);
putmdy=;
formatmdyyymmdd10.;
hms=hms(21,50,51);
puthms=;
x=21*60*60+50*60+51;
putx=;
dhms=dhms(date(),21,50,51);
putdhms=;
dhms=dhms(15263,21,50,51);
putdhms=;
y=15263*24*3600+x;
puty=;
run;
结果是:
mdy=2001-08-18
hms=78651
x=78651
dhms=1415483451
dhms=1318801851
y=1318801851
import过程步:
procimport
datafile="filename"|table="tablename"
out=sas-data-set
其中:
datafile=规定要读入外部文件的地址及其名称;table=规定外部数据文件中表名;out=规定要输出的sas数据集;
dbms=规定外部数据文件格式的标识名;replace规定替换已存在文件
PROCIMPORTOUT=CE1.DEPT222
DATAFILE="E:
\ce2.xls"
DBMS=ExcelREPLACE;
SHEET="EMP1";
GETNAMES=YES;/*获取字段的名字*/
MIXED=NO;
SCANTEXT=YES;
USEDATE=YES;
SCANTIME=YES;
RUN;
libname建立逻辑库和数据库连接:
libnameoraliboracleuser=scottpassword=ppath=liutestdbindex=y --和oracle类型的数据库连接
取消逻辑库:
libnameoradbclear; --oradb是逻辑库名字
和db2的连接:
libnamedb2libdb2authid=scottssid=p;
820 libnamece1 clear;
NOTE:
LibrefCE1hasbeendeassigned.
数据步读入原始数据:
要使用input,datalines和infile语句
使用input语句读入原始数据:
input语句的5种输入方式:
简单方式,列方式,格式化方式,列表方式,命名方式。
input的列方式:
用来读入严格排列好的标准数据
dataliu1.scores; --输入到逻辑库liu1的表scores里面
infiledatalinestruncover;
inputname$1-10sex$11age$12-15; --行的第1到10列的值为name的输入值,11列为sex的值,12到15列值是age的值
datalines;
justine F12
bob M13
run;
列表方式;要求input语句按照读入数据的顺序设定变量名称。
列表方式下的分隔符默认为空格。
用列表方式的条件:
输入数据值之间至少由一个空格隔开;用小数点表示缺省值。
:
格式修饰符:
要对变量值长度不一致的变量规定统一长度就必须用到该格式修饰符。
sas默认字符长度8B
dataliu1.blank;
inputuniv:
$12.plc$zip;
cards;
mitboston100023
tsinghuauniv beijing100084
run;
如果不对univ归档长度,读入第二条记录时就会只读入tsinghua(8B),就会报错。
&格式修饰符:
字符型输入值可能包含一个或几个空格,如果要读入的数据值本身包含空格时就必须用此格式符。
dataliu1.blank;
inputname&$12.age;
cards;
jiangzhu 20 --jiangzhu数据值本身有空格
anniezheng 31
I.altman 60
run;
因为&的特性,数据之间应该用两个以上的空格隔开。
~格式修饰符:
规定读入字符值保留引号,此格式修饰符只能在infile语句于选项dsd一起使用才有效。
DSD:
将默认分隔符改为逗号;如果不加~则自动会把数据中的引号去掉。
dataliu1.blank;
infiledatalinesdsd;
inputspeakers:
$15.title~$40.location&$10.;
datalines;
song,"creditderivatives",room329--上面的~格式符会把引号保留
run;
格式化方式:
是input语句读取非标准数据的唯一方法。
格式化方式输入:
data;
infiledatalines;
input(x1-x5)(3*7.2,2*5.2);
...
n*规定在输入列表中后面的输入格式重复n次;上面前3个变量x1-x3格式为7.2.后两个变量x4-x5格式为5.2
dataliu1.blank;
inputxcomma9.2;
datalines;
$1,000.22 --该数据符号加上数字一共是9列;结果是1000.22
run;
分组格式表:
含有两个列表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS 语句