1、SASSAS 培训第一讲培训第一讲 课程:数据的导入和导出 部门:创新业务部 时间:2014/11/19 内容概要:1.菜单操作 2.Proc import 3.Infile 语句 4.Libname 5.批量导入数据(不讲)6.数据的导出(直接使用菜单方法或 proc export,不讲)7.各种导入方法的优缺点 数据类型:Excel 数据,csv 数据(逗号分隔符),Access 数据 详细讲解:1.1.菜单导入数据菜单导入数据(只介绍(只介绍 EXCELEXCEL 数据导入,其他类似)数据导入,其他类似)1)打开导入数据向导,如下图;2)选择将要导入的数据类型,然后点击“next”;3)
2、选择将要导入的数据的物理地址,点击“OK”进入下一步;4)选择将要导入的 table,点击“next”;5)选择将数据导入哪个逻辑库并填入数据集名称,点击“next”;6)该步让用户选择是否将菜单操作背后的代码导出,若无必要直接点击“Finish”,完成数据的导入。2.2.ImportImport 过程步导入数据过程步导入数据 1)Excel 表格数据 proc import out=index1 datafile=C:UsersAdministratorDesktop399101.xlsx dbms=excel replace;range=sheet1$;getnames=NO;run;参数
3、解释:dbms规定外部文件格式的标示名 replace规定替换已存在的文件 range指定将要导入的数据范围 getnames规定是否将第一行数据作为变量名 2)csv 数据 proc import out=import_csv datafile=C:UsersAdministratorDesktopdata_lesson1鞍山20141112.csv dbms=csv replace;delimiter=,;getnames=yes;datarow=2;guessingrows=4000;run;参数解释:dbms规定外部文件格式的标示名 replace规定替换已存在的文件 delimite
4、r规定外部文件分隔符 getnames规定是否将第一行数据作为变量名 datarow规定从第几行开始读取数据 guessingrows规定根据前多少条数据确定变量格式 说明:a)对于文件格式的标示名与源文件格式之间的对应关系参SAS 编程技术教程 b)一般情况都加上 replace,以免重新导入数据时出错,当然也可以不加 c)若文件含分隔符,则必须规定 delimiter 选项 d)当 getnames=yes 时,datarow 应大于 1 e)guessingrows 最大取值为 4000,若缺省此项,SAS 默认将第一条数据的格式作为变量格式。对于数据量超过 4000 条的数据最好不要使
5、用 proc import 导入数据,有可能会导致字符被截断等情况。接下来介绍的 infile 方法可以解决这一点。3)Access 数据 proc import out=import_ac table=content dbms=access replace;database=C:UsersAdministratorDesktopdata_lesson1SpiderResult.mdb;uid=;pwd=;run;3.3.InfileInfile 语句导入数据语句导入数据 在 data 步中使用 infile 语句,可以通过先定义变量的输入格式,再导入数据,避免出现字符截断等情况。Infile
6、 语句导入数据的基本格式如下:data infile_csv;infile C:UsersAdministratorDesktopdata_lesson1鞍山20141112.csv dsd delimiter=,firstobs=2 truncover lrecl=1000;informat area_plate$munity$60.address$200.price$20.estate_time$40.constr_type$50.covers_area$30.constr_area$30.developer$100.property$100.plot_ratio$12.green_rat
7、e$12.property_fee$50.dta_date$10.pageurl$150.;input area_plate$community$address$price$estate_time$constr_type$covers_area$constr_area$developer$property$plot_ratio$green_rate$property_fee$dta_date$id$pageurl$;run;参数解释:dsd表示源数据是分隔符敏感性的,即数据中存在非空格的分隔符 delimiter规定外部文件分隔符 firstobs规定从第几行开始读取数据,类似上文中的 dat
8、arow obs读取数据的行数 truncover当部分行数据长度小于其他行时,使用该选项防止 SAS 读入到下一行 lreclSAS 默认每条数据的长度不超过 256 个字节,当一条记录的长度大于该值时,会导致部分字段读取出错,使用 lrecl 可以定义单条数据的最长长度。4.4.LibnameLibname 生成库文件生成库文件 Libname 可以用来定义一个逻辑库,每个逻辑库对应一个数据库引擎,默认的情况下数据库引擎为 V9(SAS 自带数据库引擎)。当然,也可以自由选择其他库引擎。在导入 EXCEL 数据时可以定义一个库引擎为 EXCEL 的逻辑库,可以直接将 EXCEL 中的各张
9、sheet 直接导入到 SAS 中。Libname d excel C:UsersAdministratorDesktop399101.xlsx;data lib_ex;set d.399101$n;run;对于 Access 数据亦然:libname c access C:UsersAdministratorDesktopdata_lesson1SpiderResult.mdb;5.5.批量导入(批量导入(不讲不讲)1)批量导入一个文件中的所有 csv 数据 需要编写一个宏,下面是批量导入 100 个城市的房价数据的代码:%macro directory(dir);%let rs=%sysf
10、unc(filename(filref,&dir);%let did=%sysfunc(dopen(&filref);%let nobs=%sysfunc(dnum(&did);%do i=1%to&nobs;%let name=%qscan(%qsysfunc(dread(&did,&i),1,.);%let ext=%qscan(%qsysfunc(dread(&did,&i),-1,.);data fangjia&i;infile&dir.&name.&ext dsd delimiter=,firstobs=2 truncover lrecl=1000;informat area_pla
11、te$munity$60.address$200.price$20.estate_time$40.constr_type$50.covers_area$30.constr_area$30.developer$100.property$100.plot_ratio$12.green_rate$12.property_fee$50.dta_date$10.pageurl$150.;input area_plate$community$address$price$estate_time$constr_type$covers_area$constr_area$developer$property$pl
12、ot_ratio$green_rate$property_fee$dta_date$id$pageurl$;run;%end;%let rc=%sysfunc(dclose(&did);%mend;%directory(E:房价项目房价网数据20141113);2)批量导入一张 Excel 表格中的多张 sheet 或批量导入 Access 文件中多张 table 使用 libname 导入方法即可。6.6.数据的导出数据的导出 略 7.7.各种导入方法的优缺点各种导入方法的优缺点 1)菜单操作方便,但对于有分隔符的数据(csv,txt),只根据前 20 行来确定各变量的属性,容易导致数据截断;2)proc import 对于不同数据类型,导入方法不尽相同,同样对于有分隔符的数据最多只能根据前 4000 条数据确定各变量的属性,也会导致数据截断;3)infile 语句不能导入 EXCEL 或 ACCESS 文件,但对于有分隔符的数据效果很好,还可以避免数据截断;4)libname 不能导入 csv 或 txt 文件,但对于 Excel 或 Access 有很好的批量导入解决方法。(完)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1