sas通过IMPORT过程读取外部⽂件数据
SAS通过IMPORT过程读取外部⽂件数据
使⽤IMPORT过程导⼊带分隔符的⽂件外,Microsoft Access数据库⽂件、Miscrosft Excel⼯作簿、 dBase⽂件、JMP⽂件、SPSS⽂件、Stata⽂件、Paradox等。
IMPORT过程的导⼊数据的基本形式如下:
PROC IMPORT DATAFILE=⽂件名|⽂件引⽤|DATATABLE=表名 DBMS=数据源标识符 OUT=数据集名称;
RUN;
其中:
·DATAFILE=指定输⼊⽂件的完整路径和⽂件名,或⽂件引⽤。⽂件引⽤通常通过FILENAME语句指定。
·DATATABLE=指定输⼊DBMS表名。数据源可以通过DATAFILE或DATATABLE指定。
·DBMS=指定要导⼊的数据类型。SAS⽀持多种数据类型,例如 CSV、TAB、ACCESS、XLSX、XLS、
EXCEL、JMP、DTA、SPSS 等。其中CSV、TAB表⽰要导⼊的数据⽂件分别由逗号和tab符号分隔, ACCESS表⽰使⽤LIBNAME语句的Miscrosoft Access表,XLSX表⽰ Micorsoft Excel 2007或2010的⼯作簿,等等。可参考SAS帮助⽂档了解关于导⼊数据类型和各类型的详细信息。
·OUT=指定输出的数据集名称。该语句后⾯还可以添加数据集选项。
⼀、插⼊csv⽂件
读取csv⽂件(逗号分隔的⽂件)中的数据⽂件,其中的⽂件内容如下(可以复制下⾯建⽴txt⽂件):
Name,Age,Position,Marriage,Address
Greg William,42,Manager,Single,"14 Bridge St. San Francisco, CA"
Emily Cooker, 33, Sales, Married, "42 Rue Marston"
Henry Cooper,,Office,Married,"52 Rue Marston Paris"
Jimmy Cruze,34,Manager,Single,"Box 100 Cary, NC"
使⽤如下的⽅式进⾏读取
proc import datafile="E:\SAS\sas "act dbms = csv replace;
getnames = yes;
datarow=2;
run;
proc print act;
run;
GETNAMES语句表⽰是否从该⽂件中的第⼀⾏读取变量值,默认为YES,表⽰读取;值为NO表⽰不读取,这时IMPORT过程会⾃动产⽣名为F1、F2、F3等的变量。DATAROW=语句也会经常使⽤,⽤于指定IMPORT语句开始读数据的⾏号。默认情况下,当GETNAMES=NO时,DATAROW=1,当GETNAMES=YES时,DATAROW=2。该选项⽤于跳过数据⽂件开始处的多⾏内容。
⼆、读取Miscosoft Excel⼯作簿
使⽤import 读取下⾯的excel数据
使⽤语法如下
proc import datafile = "E:\SAS\sas base\contact.xls"act2 dbms = xls replace;
run;
proc print act2;
run;
DBMS=XLS或DBMS=XLSX来读取Excel⽂件
三、读取
读取Microsoft Access数据库⽂件
三、
import语句Microsoft Access是⼀个桌⾯关系型数据库系统,通常使⽤Microsoft ACE引擎(.accdb⽂件格式)或Microsoft Jet引擎(.mdb⽂件格式)。在 IMPORT过程中指定DBMS
为ACCESS,SAS可以读取在Microsoft Access 97、Microsoft Access 2000、Microsoft Access 2003、MicrosoftAccess 2007和Microsoft Access 2010中的⽂件。
proc import out=saslib.customer datatable='customer' dbms=access replace;
database="c:\sas\data\customer.accdb";
RUN;
四、访问关系数据库
SAS⽀持的关系型数据库
1.通过LIBNAME语句访问
接⼝逻辑库是通过SAS/ACCESS接⼝软件来访问的其他软件,例如数据库管理系统、格式化的⽂件等。通过LIBNAME语句指定接⼝逻辑库的引⽤名后,就可以像访问SAS原⽣数据集⼀样通过⼆级引⽤来访问数据库中的表了。这时数据库中的表也称为接⼝数据集。这⾥简单介绍 SAS/ACCESS⽤LIBNAME语句访问关系型数据库的⼀般⽤法,更详细的⽤法请查看SAS帮助⽂档。
注意:⼤多数情况下,接⼝数据集的使⽤与原⽣数据集没有区别,但仍然会有些限制。
LIBNAME语句指定到DBMS对象的逻辑库引⽤名的基本形式如下:
LIBNAME 逻辑库引⽤名逻辑库引擎访问连接选项;
其中:
·逻辑库引⽤名为访问数据库的逻辑引⽤名称,在本章第⼀节介绍SAS逻辑库时有详细介绍。
·逻辑库引擎由所要访问的数据库确定,例如Oracle数据库的引擎为oracle,Teradata数据库的引擎为teradata,Hadoop的引擎为hadoop。
·
访问连接选项提供连接信息并控制SAS如何管理到DBMS链接的时机和并发。不同数据库,连接选项会不同。例如,连接到Oracle数据的连接选项为User=、PASSWORD=和PATH=。
下⾯两条LIBNAME语句分解建⽴了到Teradata数据库和Oracle数据库的逻辑库引⽤名。接着,就可以使⽤带逻辑库引⽤名tdlib和oralib的⼆级名称引⽤数据库中的表了。
libname tdlib teradata server=tera2650 database=hps user=user1 password=password1;
libname oralib oracle path=mypath schema=myschema user=usr1 password=password1;
2.通过PROC SQL访问
PROC SQL为SAS软件实现了结构化查询语句(Structured Query Language,SQL)。这⾥主要介绍如何通过PROC SQL使⽤SAS/ACCESS访问关系型数据库。
·使⽤LIBNAME语句指定接⼝逻辑库引⽤名,然后在PROC SQL语句中引⽤该引⽤名查询、更新或删除DBMS数据。
·将LIBNAME信息嵌⼊PROC SQL视图中,在每次处理该SQL视图时会⾃动连接到DBMS。
·
使⽤PROC SQL的扩展功能,将DBMS特定的SQL语句直接发送到DBMS,该功能叫作SQL转交(pass-through)功能。
前两种⽅法使⽤的仍然是SAS/ACCESS LIBNAME引擎,引⽤数据库中表的形式与引⽤SAS原⽣数据集相同,这⾥不做介绍。作为 LIBNAME语句的替代,SQL转交功能使
⽤SAS/ACCESS连接DBMS,并将语句直接放到DBMS中执⾏,这样就可以使⽤DBMS本⾝的SQL语法了。所以,SQL转交功能⽀持当前DBMS⽀持的任何⾮ANSI标准的SQL。需要注意的是,不是所有的SAS/ACCESS接⼝都⽀持这种属性。
使⽤SQL转交功能的基本形式如下:
PROC SQL;
CONNECT TO 数据库名称 <AS 别名> <(<;数据库连接参数> )>;
EXECUTE (数据库特定SQL语句) BY 数据库名称|别名;
SELECT 列表 FROM CONNECTION TO数据库名称|别名 (数据库查询);
DISCONNECT FROM数据库名称|别名;
QUIT;
其中:
·CONNECT语句建⽴到DBMS的连接。数据库名称标识要连接的数据库管理系统;别名为该连接指定别名;数据库连接参数指定PROC SQL连接到DBMS需要的特定的DBMS 参数。
·EXECUTE语句发送DBMS特定的、⾮查询SQL语句到DBMS。 SAS会把输⼊的内容原封不动地发送到DBMS。有些DBMS可能是⼤⼩写敏感的,需要注意。·CONNECTION TO组件获取并使⽤PROC SQL查询或视图中的 DBMS数据。数据库查询指定要发送到DBMS上的查询,该查询可使⽤对该DBMS有效的任何DBMS特定的SQL 语句或语法。同样,这些查询对有些DBMS可能是⼤⼩写敏感的。
·DISCONNECT语句终⽌与DBMS的连接。各语句执⾏的返回值和消息保存在宏变量&sqlxrc和&sqlxmsg中。下⾯的代码建⽴到Oracle数据库的连接。在CONNECT语句中,oracle为数据库名称,mycon为别名,括号⾥的内容为数据库的连接参数。%put宏将上⼀条CONNECT语句的返回值和代码打印到⽇志窗⼝。 SELECT语句通过建⽴的连接将表employees中满⾜条件(hiredate>='31- DEC-88')的⾏指定的5列(empid、lastname、firstname、hiredate、salary)数据取出。
PROC SQL还可以将上⾯的查询存储为SQL视图或创建为SAS数据集。下⾯的代码中查询条件⼀样,还是将查询存储为SAS逻辑库中的 SQL视图,这样在下次使⽤该视图时就可以⾃动从数据库中获取数据了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论