您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 绩效管理 > SAS学习系列03.-导入数据Ⅰ
03.导入数据ⅠSAS读取的数据的方法主要有以下几种:1.直接输入;表格形式输入数据,可以定义变量、设置属性;程序编辑器data步中直接输入;2.从原始数据文件中创建一个SAS数据集;data步可以读取任何形式的原始数据文件,也可以用导入向导(ImportWizard)、导入过程(IMPORTprocedure)3.将其他软件中的数据文件转换成SAS数据集;如果安装SAS/ACCESS模块,可以用导入过程和导入向导将Excel、Lotus、dBase和Access文件导入SAS数据集4.直接读取其他软件的数据集;SAS/ACCESS产品可以不用转换数据格式读取数据库管理系统,包括ORACLE,DB2,INGRES和SYBASE的数据;使用Excelengine、Accessengine和SPSSengine来读取其数据(一)直接输入1.打开【工具】——【表编辑器】,在表编辑器窗口以表格形式输入数据,可以定义变量、设置属性。(略)2.data步中直接输入(例如SAS介绍及基础篇中的例1)(二)用导入向导(ImportWizard)读取文件步骤:1.打开【文件】——【导入数据】,调出导入向导窗口;2.选择要导入的数据类型;3.指定要导入的文件位置,SAS默认第一行存放变量名,从第二行开始存放数据(Options可以改变这种默认选择);4.选择数据集要存放的地址,并为数据集命名;5.(可选)创建一个procimport语句,可以执行它再次导入这个数据。(三)从外部文件导入数据一、读取空格或分隔符分开的数据语法:data数据集名;infile‘文件路径+文件名’可选参数;input变量1变量2…;注:infile语句告诉SAS外部数据的存放路径和文件名;示例:datastudents;infile'c:\MyRawData\Studens.dat'DLM=',';inputName$AgeHeight;注:这是创建临时数据集work.students,若要创建永久数据集,需要指定二级数据集名称。例如,libnamemyworks'D:\SASWorks';datamyworks.students;infile'c:\MyRawData\Studens.dat'DLM=',';inputName$AgeHeight;1.最简单的数据文件(1)至少被一个空格,缺失值用“.”表示;(2)字符串不含空格,少于8个字符;(SAS默认字符串是8个字符,多于8个字符需要指定列宽)例1读取路径c:\MyRawData\下的数据文件ToadJump.dat,内容如下:代码:datatoads;infile'c:\MyRawData\ToadJump.dat';inputToadName$WeightJump1Jump2Jump3;run;procprintdata=toads;title'SASDataSetToads';run;运行结果:注:(1)Nosiy的数据溢出到第二行了,但这不影响,SAS会按照变量顺序自动跳到下一行读取;(2)程序将不加选择的逐行逐列的读入所有数据记录。infile语句可以加上可选参数,2.MISSOVER选项(处理每行数据个数长短不一)input语句中输入的几个变量,SAS在观测值中就读取几个变量,如果一行未读完,则进入下一行直到输入的变量都读取了变量值。可以让SAS不进入下一行读取,未赋值的变量读为缺失值。例2读入下面数据(c:\MyRawData\AllScores.dat),一个学生应该有5门课的成绩,但由于最后两门是自学课程,不是所有学生都完成,故而缺失:此时就需要加上MISSOVER。代码:dataclass102;infile'c:\MyRawData\AllScores.dat'MISSOVER;inputName$Test1Test2Test3Test4Test5;run;procprintdata=class102;run;运行结果:3.DLM和DSD选项默认读入的数据是空格分隔,若是其它分隔符分隔,在infile语句中加上DLM=’分隔符’:逗号分隔——DLM=‘,’制表符分隔——DLM=’09’X(制表符的十六进制值是09)有时后面需要再加上DSD,有三个作用:a.忽略引号中数据的“假分隔符”(例2);b.自动将字符串中的引号去掉;c.将两个相邻的分隔符当作缺失值来处理。例3读取路径c:\MyRawData\下的数据文件Bands.csv,内容如下:注意第3行引号中的逗号并不是分隔符,另外,每行数据长短不一样,所以还需要加上MISSOVER.代码:datamusic;infile'c:\MyRawData\Bands.csv'DLM=','DSDMISSOVER;inputBandName:$30.GigDate:MMDDYY10.EightPMNinePMTenPMElevenPM;run;procprintdata=music;title'CustomersatEachGig';run;运行结果:4.FIRSTOBS=mOBS=n选项有的数据文件包括数据的描述,需要用该选项告诉SAS从第m行开始读取到第n行结束。例4读取如下的数据文件(c:\MyRawData\IceCreamSales2.dat):注意第3行到第5行是有效数据。代码:dataicecream2;infile'c:\MyRawData\IceCreamSales2.dat'FIRSTOBS=3OBS=5;inputFlavor$1-9LocationBoxesSold;run;procprintdata=icecream2;run;运行结果:二、读取按固定列排列的数据(1)同一变量的值都占据相同范围的列内;(2)变量值是字符串或者标准数值。注:标准数值是指数据、小数点、正负号、和科学计算法的E。逗号数据和日期都不是标准数值。比第1种的优势在于:不要求变量值之间有空格;缺失值可以直接用空格代替;字符串中可以包含空格;可以跳过不需要的变量。语法:input变量1n-m…;注:“n-m”表示变量1数据所占的列范围,第n列至第m列。示例:inputName$1-10Age11-13Height14-18;1.标准按固定列排列的数据例5读取路径c:\MyRawData\下的数据文件OnionRing.dat,内容如下:代码:datasales;infile'c:\MyRawData\OnionRing.dat';inputVisitingTeam$1-20ConcessionSales21-24BleacherSales25-28OurHits29-31TheirHits32-34OurRuns35-37TheirRuns38-40;run;procprintdata=sales;title'SASDataSetSales';run;运行结果:2.TRUNCOVER选项使用按固定列的input或控制格式(下节)的input输入时,若某行的数据(+空格)没有占到指定列的宽度,可能会转到下一行读取,此时必须用TRUNCOVER选项,以避免发生这种错误。例6读取如下数据(c:\MyRawData\Address.dat):注意三行的长度都不一样,input中只能指定最长的一行。代码:datahomeaddress;infile'c:\MyRawData\Address.dat'TRUNCOVER;inputName$1-15Number16-19Street$22-37;run;procprintdata=homeaddress;run;运行结果:三、读取非标准格式的数据文件非标准格式的数据,包括日期数据、“8,765,432”、含美元符号、十六进制数等。语法:input变量名变量格式…;示例:inputName$10.Age3.Height5.1BirthDateMMDDYY10.;例7读取路径c:\MyRawData\下的数据文件Pumpkin.dat,内容如下:代码:datacontest;infile'c:\MyRawData\Pumpkin.dat';inputName$16.Age3.+1Type$1.+1DateMMDDYY10.(Score1Score2Score3Score4Score5)(4.1);run;procprintdata=contest;title'PumpkinCarvingContest';run;运行结果:程序说明:(1)“Name$10.”表示字符型变量Name,共占10列宽度,无小数位;(2)“Height5.1”表示数值型变量Height,共占5列宽度,其中1位小数位;(3)“+1”表示跳过一列,即原始数据中Age后面有一个空格;(4)“MMDDYY10.”共占10位的日期格式;(5)Score1Score2Score3Score4Score5五个变量格式相同,可以用小括号共同指定格式;附:变量格式及实例列表通常可以混合使用前面的三种方式,例如,例8读取路径c:\MyRawData\下的数据文件NatPark.dat,内容如下:代码:datanationalparks;infile'c:\MyRawData\NatPark.dat';inputParkName$1-22State$Year@40AcreageCOMMA9.;run;procprintdata=nationalparks;title'SelectedNationalParks';run;运行结果:程序说明:符号“@”是列指示器,“@40”告诉SAS在读取Acerage变量之前,移动到第40列去;若没有“@40”,Comma9告诉SAS读取9列,将会读取包括空格在内的9列,这便会导致输出结果有问题:四、读取凌乱的数据有的数据排列混乱,长度不一,不知道从哪列开始,但是要读取的数据前面的字符或单词是固定的。可以利用列指示器“@”+固定字符串,定位位置来读取数据。语法:input@‘字符串’变量名…;示例:input@'Breed:'DogBreed$;另外,input读取字符串变量默认为8个字符,若超过8个字符,则需要定义长度,定义为$length,在该长度中,空格也算在内。若要使SAS读取过程中遇到空格则不再继续读取,则要在$length.前面加冒号“:”。比如原始数据中有这么一行:MydogSamBreed:RottweilerVetBills:$478用下述述不同方法读取,会有不同结果:例9读取路径c:\MyRawData\下的数据文件Canoes.dat,内容如下:读取学校名和时间。代码:datacanoeresults;infile'c:\MyRawData\Canoes.dat';input@'School:'School$@'Time:'RaceTime:STIMER8.;run;procprintdata=canoeresults;titleConcreteCanoeMen'sSprintResults;run;运行结果:(注意:时间转化为以秒为单位)程序说明:(1)@’School:’和@’Time:’来指定读取学校名和时间的起始位置;(2)由于Time占的字节数不同,用了冒号修饰符,:STIMER8.来读取时间,STIMER8是时间格式。若没有冒号修饰符,当遇到字符位数不够时,SAS将会跳到下一个数据行去接着读取,输出错误结果:例10读取路径c:\MyRawData\下的数据文件weblogs.txt,内容如下:读取其中的访问日期和访问的文件名。代码:dataweblogs;infile'C:\MyRawData\weblogs.txt';input@'['AccessDateDATE11.@'GET'File:$20.;procprintdata=weblogs;title'DogCareWebLogs';run;运行结果:五、读取非“一行一个观测值”数据、有选择地读取观测值1.跨行观测值数据
本文标题:SAS学习系列03.-导入数据Ⅰ
链接地址:https://www.777doc.com/doc-4081871 .html