应用SAS处理和分析数据之前,必须将数据读入到SAS系统。SAS系统提供了多种数据获取数据的方式。在实践中,我们可以直接调用SAS数据集(如epidata数据可直接导出为SAS数据集),或导入外部数据文件创建SAS数据集。外部数据主要包括:数据库管理系统(Data Base Mangement System,DBMS)数据文件、PC数据文件、Flat数据文件和流式数据。今天我们主要介绍SAS读取外部数据的方法(详见图3-1)。 ![](http://image109.360doc.com/DownloadImg/2020/10/2319/205328071_1_20201023070635522_wm) DATA步是SAS编程中的重要组成部分,DATA步的各种输入方式可以获取外部数据,并创建SAS数据集。DATA步中的INPUT语句可以很简单,也可以很复杂,其语法的复杂性主要体现在输入申明中。在实践中,很少用单纯的一种去获取外部数据,组合式较常用。INPUT语句形式如下:DATA 数据名; INFILE 数据文件路径; INPUT <指针控制> 变量列表<:|&|~> <输入格式> <@|@@>; RUN; INPUT语句中描述一个记录值有四种方式:列方式、列表方式、格式化方式和命名方式。INPUT语句中指针、列表、格式等符号的详细说明见表3-1。![](http://image109.360doc.com/DownloadImg/2020/10/2319/205328071_2_20201023070635725_wm)
1.列表读入 列表读入式适合于变量间规律的以一个或多个连续字符作为分隔符,但数据不整齐的数据读入。列表读入是按变量在DATALINES数据行里出现的顺序列出读入的变量名。语法的基本形式如下: INPUT <指针控制> 变量 <$> <&> <@ | @@>;INPUT <指针控制> 变量<: | & | ~> <格式.> <@ | @@>;*===读入变量不齐整且字符较长的数据; DATA list; INPUT name :$9. age lastname & $13. team $; /*读入name时碰到空格或者第9列,读入lastname时碰到空格或者第13列时,读完变量*/ DATALINES; Joseph 11 Joergensen red Mitchel 13 Mc-Allister blue Su-Ellen 14 Fischer-Simon green ; RUN; *===读入变量列上不齐整且有空格的、字符较长的数据; DATA list; INPUT name & $9. age lastname & $13. team $; /*碰到空格变量不会结束,继续读入*/ DATALINES; Joseph 11 Joergensen red Mitchel 13 Mc Allister blue Su Ellen 14 Fischer-Simon green ; RUN; *===读入含有分隔符的数据; DATA list; INFILE datalines delimiter=','; INPUT name $ age lastname$13. team $; DATALINES; Joseph,11,Joergensen,red Mitchel,13,Mc Allister,blue Su Ellen,14,FischerSimon,green ; RUN; 当变量值在所有的数据行上出现在相同的列上,或者输入值是标准数值或字符型格式时,应用列读入方式。列读入的格式如下:INPUT 变量 <$> 开始列 <- 最后一列> <.小数位数> <@ | @@> ;*===列读入式创建临时数据集data; DATA data; INPUT code $ 1-2 name $ 3-11 x1 12-17 .4; DATALINES; 1 张三 0.7597 2 李四 0.8638 3 王二 0.9285 4 李三 0.9575 5 王小 0.4472 6 李磊 0.7745 7 朱明 0.0530 ; RUN; 如果数据行中含有变量的名字,后面跟着等号(=),和变量的值时,读取方式就应用命名读入式,命名读入的格式如下:INPUT <指针控制> 变量= <$> <@ | @@>;INPUT <指针控制> 变量= 格式. <@ | @@>;INPUT 变量= <$> 开始列 <-最后一列> <.小数位数> <@ | @@>;*===命名读入数据文件; DATA list; INPUT name $ age= lastname= $13. team= $; DATALINES; Joseph age=11 lastname=Joergensen team=red Mitchel age=13 lastname=Mc-Allister team=blue Ellen age=14 lastname=Fischer-Simon team=green ; RUN; 格式读入式可以指出数据的类型和取值的宽度,以及读入非标准形式的数字,如科学计数法、带货币的符号等。在格式读入式时要注意:有格式输入要求变量的顺序与相应值的顺序要一致;在通常有格式输入情况下,用空格或加点来表示数值型变量的缺失值,用空格表示字符型变量的缺失值; 在INPUT语句中定义过的输入格式名字不能存储到SAS数据集中,用INFORMAT或ATTRIB语句定义过的输入格式可以存储到SAS数据集中,以便DATA步的使用。INPUT <指针控制> 变量格式. <@ | @@>;INPUT<指针控制> (变量列表) (格式列表) <@ | @@>;INPUT <指针控制> (变量列表(<n*> 格式.) <@ | @@>;*===INPUT格式读入数据; DATA scores; /*创建临时数据集scores*/ INPUT (name score1-score5) ($10. 5*4.); /*name是字符变量占10列,score1-4是数值变量,每个变量占4列*/ DATALINES; Whittaker 121 114 137 156 142 Smythe 111 97 122 143 127 ; RUN; *===INPUT格式读入带有计数法的数据; DATA list; INPUT name $8. Age 3. lastname $14. team $6. Money comma6. ; DATALINES; Joseph 11 Joergensen red 23,213 Mitchel 13 Mc Allister blue 12,234 Ellen 14 Fischer-Simon green 26,765 ; RUN; ![](http://image109.360doc.com/DownloadImg/2020/10/2319/205328071_3_20201023070635913_wm) LIBNAME语句获取DBMS数据文件的语法如下: 应用LIBNAME获取外部数据时,不同的外部数据文件,其引擎和逻辑库选项也是不同,详见表3-2。![](http://image109.360doc.com/DownloadImg/2020/10/2319/205328071_5_20201023070636163_wm) *需要注意的是,通过ODBC获取数据文件的前提条件是必须创建ODBC数据源。 PROC IMPORT获取外部数据的方式比较简单,可用于导入PC数据文件和FLAT数据文件,PROC IMPORT过程的语法如下:![](http://image109.360doc.com/DownloadImg/2020/10/2319/205328071_6_20201023070636444_wm)
*===获取excle数据文件; LIBNAME xjf ‘E:study fileJindingtongjiSAS’; /*创建永久性逻辑库*/ PROC IMPORT out=xjf.dataxls datafile=” E:study fileJindingtongjiSASdata.xlsx” dbms=excel replace; /*指定要读取的外部文件为excel,指定替换已存在文件*/ rang=”’sheet1$A1:G100’n”; /*读取数据的范围*/ getnames=yes; /*从文件中第一行读取变量值,默认值为yes*/ run; *===获取MS ACCESS数据文件; LIBNAME xjf ‘E:study fileJindingtongjiSAS’; /*创建永久性逻辑库*/ PROC IMPORT out=xjf.dataxls datatable=’data’ /*指定要读取的外部文件地址和名称*/ dbms=access replace; /*指定要读取的外部文件为access,指定替换已存在文件*/ database=” E:study fileJindingtongjiSASdata.accdb”; /*指定要读取的外部文件地址和名称*/ run; *===获取csv数据文件; LIBNAME xjf ‘E:study fileJindingtongjiSAS’; /*创建永久性逻辑库*/ PROC IMPORT out=xjf.datacsv datafile=” E:study fileJindingtongjiSASdata.csv” dbms=csv replace; /*指定要读取的外部文件为csv,指定替换已存在文件*/ rang=”’sheet1$A1:G100’n”; /*读取数据的范围*/ getnames=yes; /*从文件中第一行读取变量值,默认值为yes*/ datarow=2; /*指定读取数据的行号,当getname=no时,datarow=1;当getname=yes,datarow=2*/ run; *===获取制表符分隔文本; PROC IMPORT out=xjf.datacsv datafile=” E:study fileJindingtongjiSASdata.txt” dbms=dlm replace; /*指定要读取的外部文件为dlm,指定替换已存在文件*/ delimiter=’09’x; /*’09’x表示制表符,’20’x表示空格*/ getnames=yes; /*从文件中第一行读取变量值,默认值为yes*/ run; *===读取EXCEL数据文件; PROC SQL; CONNECT to excel (path=” E:study fileJindingtongjiSASdata.xls”); /*连接数据库*/ CREATE table data as SELECT * from connection to excel (select* from[sheet1$]); /*创建数据集data*/ DISCONNECT from excel; /*断开连接*/ quit; *===读取TERADATA数据文件; PROC SQL; CONNECT to teradata (user=xjf password=xxxxxx database=access_views tdpid=”xxxxxx” mode=teradata); /*连接数据库*/ CREATE table data as SELECT * from connection to teradata (select* from access_viwes.data); /*创建数据集data*/ DISCONNECT from teradata; /*断开连接*/ quit; 应用PROC ACCESS过程可以对外部数据文件进行透明访问和读写。PROC ACCESS获取外部数据文件分两步完成:首先创建访问描述器,然后创建基于外部数据文件的数据视察。基于一个访问描述器可创建多个数据视窗。SAS数据视窗和SAS数据集都是数据文件,均可作为数据对象被引用。PROC ACCESS过程语法的一般格式如下:![](http://image109.360doc.com/DownloadImg/2020/10/2319/205328071_7_20201023070636585_wm) 创建访问描述器的程序对于不同的外部文件有不同的形式。下面将以EXCEL和DBF外部数据文件为例进行介绍。*===获取EXCEL数据文件; PROC ACCESS DBMS=xls; CREATE xjflib.xjfdata.access; /*创建ACCESS描述器*/ PATH ‘E:study fileJindingtongjiSASdata.xls’; GETNAMES=yes; /*从文件中第一行读取变量值*/ ASSIGNE=yes; /*自动产生SAS变量名及其格式*/ RUN; *===获取DBF数据文件; PROC ACCESS DBMS=dbf ACCDESC= xjflib.xjfdata; CREATE xjflib.xjfdata.access; /*创建ACCESS描述器*/ PATH ‘E:study fileJindingtongjiSASdata.dbf’; RUN; 在以上介绍的5种SAS获取外部数据方法各有优缺点,在实际应用中可根据实际情况选择最方便快捷的方法来完成数据的获取。下面就将几种方法做一个简单的总结以供大家参考。1、DATA步INPUT获取数据:这种方法实际应用中基本者是组合式完成数据获取,具有较强的灵活性,语法编程具有复杂性和多样性。因此,在处理大数据时不推荐此种方法,这种方法可用于数据量较少或者测验时。SAS初学者可以通过这种获取数据的方法深入理解SAS运行机制。2、LIBNAME语句相对来说是获取外数据文件最为快捷、方便的方法。在应用的过程需要数据库引擎,而PC数据文件并不是都有相应的引擎支持,因此对于PC数据文件不推荐此种方法导入。LIBNAME语句常用于DBMS数据文件的获取。3、PROC IMPORT过程具有较好的灵活性和方便性,对于数据的控制选项也较多,比较适合于PC数据文件和FLAT数据文件的获取。对初学者还可以用视窗导入,并生成数据导入与导出的程序以便初学者参考学习。4、PROC SQL过程是Base SAS软件的部分,可实现获取外部数据外,还可实现从一个或多个表中查询信息、生成表、向表中插入行、更新表的内容、表的纵向合并和横向连接等极其复杂的数据管理功能。PROC SQL可以在交互式SAS会话中使用,也可以在批处理程序中使用,其包括全局语句,如:title和options。SQL语言是目前主流数据库的查询语言,在数据集查询功能上是非常有优势的。后期我们会深入介绍PROC SQL的应用。5、PROC ACCESS可以创建访问描述器、视图描述器和SAS数据文件,描述品文件与SAS6兼容。描述吕文件描述PC数据文件,可以直接读取、写入、更新和提取PC数据。但这个程序一般不再使用,也不受支持。参考文献: [1] 谷鸿秋. SAS编程演义[M]. 北京:清华大学出版社,2017. [2] 高惠璇. SAS系统Base SAS软件使用手册[M]. 北京:中国统计出版社,1997. [3] https://support./en/software/base-sas-support.html. [4] 夏庄坤, 徐唯, 潘红莲, 等. 深入解析SAS——数据处理、分析优化与商业应用[M]. 北京: 机械工业出版社,2014. [5] 姚志勇. SAS编程与数据挖掘商业案例[M]. 北京:机械工业出版社,2010. 整理不易,欢迎点亮再看!
|