Engine(引擎)是一种访问架构,SAS系统通过它迅速地对其它数据库管理系统中文件进行读入和写出。
1.LIBNAME语句1.1解读定义SAS 逻辑库。
具体地说,它可以(1)向SAS 标识SAS 逻辑库(2)将引擎与逻辑库关联(3)让您指定逻辑库的选项(4)为逻辑库指定逻辑库引用名通俗得讲,LIBNAME语句把一个libref(库标记名)和一个目录联系起来,使用户可以在SAS语句中使用库标记来指示这个目录。
提交该程序时自动引用该SAS 逻辑库1.2 语句格式1、LIBNAME libref <engigne><'SAS-data-library'><Access=Readonly|Temp>;2、LIBNAME libref Clear;3、LIBNAME libref |_ All_ List;三种格式反映了LIBNAME语句的三种用法选项说明2.length语句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;4.SET 语句Set语句可以用来读取单个数据集中的数据,也可以用来读取多个数据集中的数据拼接SAS新的数据集。
程序为:DAT A 新数据集;SET 输入数据集1 输入数据集2 ….;Run;如果不适用DROP=和KEEP=选项,在新的数据集中将包含所有旧数据集的变量。
5.DO 循环语句语句一:DO WHILE (expression);...more SAS statements...END;语句二:DO UNTIL (expression);...more SAS statements...END;语句三:DO index-variable=start <TO stop> <BY increment> <WHILE(expression) | UNTIL(expression)>;. . . more SAS statements . . .END;例如:do i=1 to 10;do i=10 to 0 by -1 while(month='JAN');语句四:DO item-1<,…item-n><WHILE(expression) | 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 IMPORTDATAFILE="filename" | TABLE="tablename"OUT=<libref.>SAS-data-set<(SAS-data-set-options)><DBMS=identifier><REPLACE> ;<data-source-statement(s);>说明:DAT AFILE="filename"用来指定数据文件的位置,如果是Access则用T ABLE="tablename"指定需要读取的数据表;OUT= 指定输出数据集的名称;DBMS=identifier 指定导入数据表的类型;几个常用的DBMS选项如下ACCESS 读取MS ACCESS2000/2002数据EXCEL 读取Excel2000/2002数据CSV 读取逗号分隔的文件DLM 读取分隔符文件,需要用DELIMITER=指明具体的分隔符TAB 读取T ab分隔的文件REPLACE选项替换原来已经存在的数据集,缺省情况下是不替换,并在LOG窗口中予以提示;6.2 proc import读取带分隔符的文件语法格式:PROC IMPORTDAT AFILE=OUT=DBMS=REPLACE;(Data source statements:)DAT AROW=n ;DELIMITER= ;GETNAMES=YES|NO;说明:DBMS= 需要指定DLM,逗号分隔文件可省略;DAT AROW=n; 指定从数据文件的第几行开始读取,该选项缺省情况下,如果getnames=yes则从第二行开始读取,getnames=no从第一行开始读取;DELIMITER=; 指定分隔符;GETNAMES=; 告诉SAS是否将数据文件的第一行作为变量读取,该选项缺省为yes。
如果第一行是变量名,而该选项为no则会将列为数值型的第一行读取为缺失值。
当指定getnames=no时,对于DLM文件,则SAS自动将变量命名为V AR1, V AR2, ...;对于Excel文件,则SAS自动命名变量为F1, F2, …举例:proc import datafile="C:\MyDocuments\myfiles\delimiter.txt"out=mydatadbms=dlmreplace;delimiter='&';getnames=yes;run;6.3 proc import读取Excel文件语法格式:PROC IMPORTDAT AFILE=OUT=DBMS=REPLACE;(Data source statements:)SHEET=;GETNAMES= YES|NO;注:读取Excel时,可以不指定DBMS=选项。
举例:proc import datafile="c:\clinic files\drug1.xls"out=drug1;sheet='lab';getnames=yes;run;6.4 proc import读取数据库表(如Access)语法格式:PROC IMPORTTABLE=OUT=DBMS=REPLACE;(Data source Statements:)DAT ABASE=PWD=UID=WGDB=说明:DAT ABASE= 指明数据库存放的路径及名字UID= 数据库用户名PWD= 密码WGDB= 工作组名称举例:proc import table="customers"out=sasuser.custdbms=access97;uid="userid";pwd="mypassword";database="c:\myfiles\east.mdb";wgdb="c:\winnt\system32\security.mdb";run;通常情况下,proc import是可以不掌握的,通过视窗操作可能更方便,特不过用proc import能够更精细的控制。
在写import过程的时候,要特别注意分号的位置,从最开始的语法格式那里可以看出,proc import后面的一般选项是连在一起写的,中间用空格隔开,最后才以分号结尾;而数据源选项则每一项都要以分号结束。
这些地方往往容易出错。
7. CARDS语句用于直接输入数据,标志着数据块的开始。
格式如下:CARDS;数据块;8.SORT和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数据集。