SAS学习系列03导入大数据Ⅰ文档格式.docx

上传人:b****6 文档编号:19397171 上传时间:2023-01-05 格式:DOCX 页数:19 大小:555.73KB
下载 相关 举报
SAS学习系列03导入大数据Ⅰ文档格式.docx_第1页
第1页 / 共19页
SAS学习系列03导入大数据Ⅰ文档格式.docx_第2页
第2页 / 共19页
SAS学习系列03导入大数据Ⅰ文档格式.docx_第3页
第3页 / 共19页
SAS学习系列03导入大数据Ⅰ文档格式.docx_第4页
第4页 / 共19页
SAS学习系列03导入大数据Ⅰ文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

SAS学习系列03导入大数据Ⅰ文档格式.docx

《SAS学习系列03导入大数据Ⅰ文档格式.docx》由会员分享,可在线阅读,更多相关《SAS学习系列03导入大数据Ⅰ文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

SAS学习系列03导入大数据Ⅰ文档格式.docx

语法:

data数据集名;

infile‘文件路径+文件名’<

可选参数>

;

input变量1变量2…;

注:

infile语句告诉SAS外部数据的存放路径和文件名;

示例:

datastudents;

infile'

c:

\MyRawData\Studens.dat'

DLM='

'

inputName$AgeHeight;

这是创建临时数据集work.students,若要创建永久数据集,需要指定二级数据集名称。

例如,

libnamemyworks'

D:

\SASWorks'

datamyworks.students;

1.最简单的数据文件

(1)至少被一个空格,缺失值用“.”表示;

(2)字符串不含空格,少于8个字符;

(SAS默认字符串是8个字符,多于8个字符需要指定列宽)

例1读取路径c:

\MyRawData\下的数据文件ToadJump.dat,内容如下:

代码:

datatoads;

\MyRawData\ToadJump.dat'

inputToadName$WeightJump1Jump2Jump3;

run;

procprintdata=toads;

title'

SASDataSetToads'

运行结果:

(1)Nosiy的数据溢出到第二行了,但这不影响,SAS会按照变量顺序自动跳到下一行读取;

(2)程序将不加选择的逐行逐列的读入所有数据记录。

infile语句可以加上可选参数,

2.MISSOVER选项(处理每行数据个数长短不一)

input语句中输入的几个变量,SAS在观测值中就读取几个变量,如果一行未读完,则进入下一行直到输入的变量都读取了变量值。

可以让SAS不进入下一行读取,未赋值的变量读为缺失值。

例2读入下面数据(c:

\MyRawData\AllScores.dat),一个学生应该有5门课的成绩,但由于最后两门是自学课程,不是所有学生都完成,故而缺失:

此时就需要加上MISSOVER。

dataclass102;

\MyRawData\AllScores.dat'

MISSOVER;

inputName$Test1Test2Test3Test4Test5;

procprintdata=class102;

3.DLM和DSD选项

默认读入的数据是空格分隔,若是其它分隔符分隔,在infile语句中加上DLM=’分隔符’:

逗号分隔——DLM=‘,’

制表符分隔——DLM=’09’X(制表符的十六进制值是09)

有时后面需要再加上DSD,有三个作用:

a.忽略引号中数据的“假分隔符”(例2);

b.自动将字符串中的引号去掉;

c.将两个相邻的分隔符当作缺失值来处理。

例3读取路径c:

\MyRawData\下的数据文件Bands.csv,内容如下:

注意第3行引号中的逗号并不是分隔符,另外,每行数据长短不一样,所以还需要加上MISSOVER.

datamusic;

\MyRawData\Bands.csv'

DSDMISSOVER;

inputBandName:

$30.GigDate:

MMDDYY10.EightPMNinePMTenPMElevenPM;

procprintdata=music;

CustomersatEachGig'

4.FIRSTOBS=mOBS=n选项

有的数据文件包括数据的描述,需要用该选项告诉SAS从第m行开始读取到第n行结束。

例4读取如下的数据文件(c:

\MyRawData\IceCreamSales2.dat):

注意第3行到第5行是有效数据。

dataicecream2;

\MyRawData\IceCreamSales2.dat'

FIRSTOBS=3OBS=5;

inputFlavor$1-9LocationBoxesSold;

procprintdata=icecream2;

二、读取按固定列排列的数据

(1)同一变量的值都占据相同范围的列内;

(2)变量值是字符串或者标准数值。

标准数值是指数据、小数点、正负号、和科学计算法的E。

逗号数据和日期都不是标准数值。

比第1种的优势在于:

●不要求变量值之间有空格;

●缺失值可以直接用空格代替;

●字符串中可以包含空格;

●可以跳过不需要的变量。

语法:

input变量1n-m…;

注:

“n-m”表示变量1数据所占的列范围,第n列至第m列。

inputName$1-10Age11-13Height14-18;

1.标准按固定列排列的数据

例5读取路径c:

\MyRawData\下的数据文件OnionRing.dat,内容如下:

datasales;

\MyRawData\OnionRing.dat'

inputVisitingTeam$1-20ConcessionSales21-24BleacherSales25-28OurHits29-31TheirHits32-34OurRuns35-37TheirRuns38-40;

procprintdata=sales;

SASDataSetSales'

2.TRUNCOVER选项

使用按固定列的input或控制格式(下节)的input输入时,若某行的数据(+空格)没有占到指定列的宽度,可能会转到下一行读取,此时必须用TRUNCOVER选项,以避免发生这种错误。

例6读取如下数据(c:

\MyRawData\Address.dat):

注意三行的长度都不一样,input中只能指定最长的一行。

datahomeaddress;

\MyRawData\Address.dat'

TRUNCOVER;

inputName$1-15Number16-19Street$22-37;

procprintdata=homeaddress;

三、读取非标准格式的数据文件

非标准格式的数据,包括日期数据、“8,765,432”、含美元符号、十六进制数等。

input变量名变量格式…;

inputName$10.Age3.Height5.1BirthDateMMDDYY10.;

例7读取路径c:

\MyRawData\下的数据文件Pumpkin.dat,内容如下:

datacontest;

\MyRawData\Pumpkin.dat'

inputName$16.Age3.+1Type$1.+1DateMMDDYY10.

(Score1Score2Score3Score4Score5)(4.1);

procprintdata=contest;

PumpkinCarvingContest'

程序说明:

(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;

\MyRawData\NatPark.dat'

inputParkName$1-22State$Year@40AcreageCOMMA9.;

procprintdata=nationalparks;

SelectedNationalParks'

符号“@”是列指示器,“@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;

\MyRawData\Canoes.dat'

School:

School$@'

Time:

RaceTime:

STIMER8.;

procprintdata=canoeresults;

title"

ConcreteCanoeMen'

sSprintResults"

(注意:

时间转化为以秒为单位)

(1)@’School:

’和@’Time:

’来指定读取学校名和时间的起始位置;

(2)由于Time占的字节数不同,用了冒号修饰符,:

STIMER8.来读取时间,STIMER8是时间格式。

若没有冒号修饰符,当遇到字符位数不够时,SAS将会跳到下一个数据行去接着读取,输出错误结果:

例10读取路径c:

\MyRawData\下的数据文件weblogs.txt,内容如下:

读取其中的访问日期和访问的文件名。

dataweblogs;

C:

\MyRawData\weblogs.txt'

['

AccessDateDATE11.@'

GET'

File:

$20.;

procprintdata=weblogs;

DogCareWebLogs'

五、读取非“一行一个观测值”数据、有选择地读取观测值

1.跨行观测值数据

例11读取路径c:

\MyRawData\下的数据文件Temperature.dat,内容如下:

注意一个观测值占据3行。

datahighlow;

\MyRawData\Temperature.dat'

inputCity$State$

/NormalHighNormalLow

#3RecordHighRecordLow;

procprintdata=highlow;

HighandLowTemperaturesforJuly'

(1)SAS先读取第一行的city变量和state变量,斜线/告诉SAS移动到下一行的第一列,以便读取normalhigh和normallow.

(2)#3告诉SAS移动到第三行的第一列以便继续读取观测值的recordhigh变量和recordlow变量。

2.一行有多个观测值的数据

当一行出现多个观测值时,可以在input语句结尾加一个停止符号@@.

例12读取路径c:

\MyRawData\下的数据文件Precipitation.dat,内容如下:

注意第一行包含2个观测值。

datarainfall;

\MyRawData\Precipitation.dat'

inputCity$State$NormalRainMeanDaysRain@@;

procprintdata=rainfall;

title1'

NormalTotalPrecipitationand'

title2'

MeanDayswithPrecipitationforJuly'

3.有选择地读取部分观测值

有时候只需要读取原始数据的部分观测值,比如只需要年鉴中的女性数据、收入超过10万的人口数据等。

实现方法:

在SAS读取某一行观测值时,先读取到“判断”变量,然后在input语句结尾加符号@,(叫做trailingat),告诉SAS先停在此行,同时用if语句检测此观测值是否满足条件,若满足,那么可以再用一个input语句来读取其它变量。

例13交通数据(c:

\MyRawData\Traffic.dat)包含街道的类型(freeways和surface)、街道名称、早晨每小时的机动车流动量、晚上每小时机动车流动量。

要求只读取freeway的数据。

datafreeways;

\MyRawData\Traffic.dat'

inputType$@;

ifType='

surface'

thenDELETE;

inputName$9-38AMTrafficPMTraffic;

procprintdata=freeways;

TrafficforFreeways'

@的作用类似于@@,都是行停留指示符,不同地方在于停留多久,@能使SAS停留到下一个input语句(也不换行),@@能使停留的时间到下一个data步(也不换行)。

比如这段代码:

datatest;

infilecards;

inputx@;

inputy;

inputz@@;

cards;

123456

789101112

1314151617

procprintdata=test;

test输出结果就是:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1