SAS导入数据

  • 格式:pdf
  • 大小:277.72 KB
  • 文档页数:4

SAS培训第一讲课程:数据的导入和导出部门:创新业务部时间:2014/11/19内容概要:1.菜单操作2.Proc import3.Infile语句4.Libname5.批量导入数据(不讲)6.数据的导出(直接使用菜单方法或proc export,不讲)7.各种导入方法的优缺点数据类型:Excel数据,csv数据(逗号分隔符),Access数据详细讲解:1.菜单导入数据(只介绍EXCEL数据导入,其他类似)1)打开导入数据向导,如下图;2)选择将要导入的数据类型,然后点击“next”;3)选择将要导入的数据的物理地址,点击“OK”进入下一步;4)选择将要导入的table,点击“next”;5)选择将数据导入哪个逻辑库并填入数据集名称,点击“next”;6)该步让用户选择是否将菜单操作背后的代码导出,若无必要直接点击“Finish”,完成数据的导入。

2.Import过程步导入数据1)Excel表格数据proc import out = index1datafile = "C:\Users\Administrator\Desktop\399101.xlsx"dbms = excel replace;range = "sheet1$";getnames = NO;run;参数解释:dbms——规定外部文件格式的标示名replace——规定替换已存在的文件range——指定将要导入的数据范围getnames——规定是否将第一行数据作为变量名2)csv数据proc import out = import_csvdatafile = "C:\Users\Administrator\Desktop\data_lesson1\鞍山20141112.csv"dbms = csv replace;delimiter = ',';getnames = yes;datarow = 2;guessingrows = 4000;run;参数解释:dbms——规定外部文件格式的标示名replace——规定替换已存在的文件delimiter——规定外部文件分隔符getnames——规定是否将第一行数据作为变量名datarow——规定从第几行开始读取数据guessingrows——规定根据前多少条数据确定变量格式说明:a)对于文件格式的标示名与源文件格式之间的对应关系参《SAS编程技术教程》b)一般情况都加上replace,以免重新导入数据时出错,当然也可以不加c)若文件含分隔符,则必须规定delimiter选项d)当getnames=yes时,datarow应大于1e)guessingrows最大取值为4000,若缺省此项,SAS默认将第一条数据的格式作为变量格式。

对于数据量超过4000条的数据最好不要使用proc import导入数据,有可能会导致字符被截断等情况。

接下来介绍的infile方法可以解决这一点。

3)Access数据proc import out = import_actable = 'content'dbms = access replace;database ="C:\Users\Administrator\Desktop\data_lesson1\SpiderResult.mdb";uid = '';pwd = '';run;3.Infile语句导入数据在data步中使用infile语句,可以通过先定义变量的输入格式,再导入数据,避免出现字符截断等情况。

Infile语句导入数据的基本格式如下:data infile_csv;infile"C:\Users\Administrator\Desktop\data_lesson1\鞍山20141112.csv" dsd delimiter=','firstobs=2truncover lrecl=1000;informat area_plate $40. community $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 $ plot_ratio $ green_rate $ property_fee $ dta_date $ id $ pageurl $;run;参数解释:dsd——表示源数据是分隔符敏感性的,即数据中存在非空格的分隔符delimiter——规定外部文件分隔符firstobs——规定从第几行开始读取数据,类似上文中的datarowobs——读取数据的行数truncover——当部分行数据长度小于其他行时,使用该选项防止SAS读入到下一行lrecl——SAS默认每条数据的长度不超过256个字节,当一条记录的长度大于该值时,会导致部分字段读取出错,使用lrecl可以定义单条数据的最长长度。

4.Libname生成库文件Libname可以用来定义一个逻辑库,每个逻辑库对应一个数据库引擎,默认的情况下数据库引擎为V9(SAS自带数据库引擎)。

当然,也可以自由选择其他库引擎。

在导入EXCEL数据时可以定义一个库引擎为EXCEL的逻辑库,可以直接将EXCEL中的各张sheet直接导入到SAS中。

Libname d excel 'C:\Users\Administrator\Desktop\399101.xlsx';data lib_ex;set d.'399101$'n;run;对于Access数据亦然:libname c access'C:\Users\Administrator\Desktop\data_lesson1\SpiderResult.mdb';5.批量导入(不讲)1)批量导入一个文件中的所有csv数据需要编写一个宏,下面是批量导入100个城市的房价数据的代码:%macro directory(dir);%let rs=%sysfunc(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 truncoverlrecl=1000;informat area_plate $40. community $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 $ plot_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.数据的导出略7.各种导入方法的优缺点1)菜单操作方便,但对于有分隔符的数据(csv,txt),只根据前20行来确定各变量的属性,容易导致数据截断;2)proc import对于不同数据类型,导入方法不尽相同,同样对于有分隔符的数据最多只能根据前4000条数据确定各变量的属性,也会导致数据截断;3)infile语句不能导入EXCEL或ACCESS文件,但对于有分隔符的数据效果很好,还可以避免数据截断;4)libname不能导入csv或txt文件,但对于Excel或Access有很好的批量导入解决方法。

(完)。