sas读入数据全解析.docx
- 文档编号:26174488
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:17
- 大小:24.73KB
sas读入数据全解析.docx
《sas读入数据全解析.docx》由会员分享,可在线阅读,更多相关《sas读入数据全解析.docx(17页珍藏版)》请在冰豆网上搜索。
sas读入数据全解析
SAS数据步导入数据终极汇总——经典,一看就会
一、将数据录入SAS——DATAStep/Viewtable
1.Internalrawdata-DatalinesorCards命令;
2.ExternalRawdatafiles-Infile命令+Input命令;
二、将数据文件读入SAS——DATAStep/PROCIMPORT
1.将SAS文件读入SAS——
datasasuser.saslin;
set"F:
\sas1.sas7bdat";
run;
proccontentsdata=sasuser.saslin;
run;
2.将其他形式文件导入成SAS——PROCIMPORT/直接读入其他形式文件
procimportdatafile="c:
\data\hsb2.sav"out=work.hsb2;
run;
proccontentsdata=hsb2;
run;
SAS导入数据:
SASrecognizesthefiletypetobeimportedbyfileextension.
对数据长度的限制
在一些操作环境,SAS假定外部文件的纪录对最长为256〔一行数据包括空格等所有字符在内的长度,如果预计读入的纪录长度超过256,可在Infile语句中使用LRECL=n这个命令。
读入以空格作为分隔符的原始数据
如果原始数据的不同变量之间是以至少一个空格作为分隔符的,那可以直接采用List方法将这些数据读入SAS。
ListInput读数据非常方便,但也有很多局限性:
〔1 不能跳过数据;
〔2 所有的缺失值必须以点代替
〔3 字符型数据必须是不包含空格的,且长度不能超过8;
〔4 不能直接读入日期型等特殊类型的数据。
程序举例:
INPUTName$AgeHeight;
读入按列组织的数据
有些原始数据的变量之间没有空格或其他分隔符,因此这样的文件不能以List形式对入SAS。
但若不同变量值的都在每条记录的固定位置处,则可以按照Column形式读入数据。
Colunm读数据方法要求所有的数据均为字符型或者标准的数值型〔数值中仅包括数字,小数点,正负号,或者是E,不包括逗号或日期型数据。
相对于List方法,Column读数据方法有如下优点:
〔1 变量值之间无需用空格分开;
〔2 可以空格表示缺失值;
〔3 字符型数据中可包括空格;
〔4 可跳过数据。
程序举例:
INPUTName$1-10Age11-13Height14-18;
使用格式命令读入非标准格式的数据
字符型数据:
$informatw.
数值型数据:
informatw.d
日期型数据:
Datew.
<1>字符型:
$CHARw.:
不删除前后空格,读入字符数据;
$HEXw.:
将16进制的数据转化成字符数据;
$w. :
删除前面空格,读入字符数据;
<2>日期,时间或日期时间型数据
DATEw. :
以ddmmmyy或ddmmmyyyy形式读入日期;
DATETIMEw.:
以ddmmmyyhh:
mm:
ss.ss形式读入日期时间;
DDMMYYw. :
以ddmmyy或ddmmyyyy读入日期;
JULIANw. :
以yyddd或yyyyddd读入Julia日期;
MMDDYYw. :
以mmddyy或mmddyyyy形式读入日期;
TIMEw. :
以hh:
mm:
ss.ss形式读入时间;
<3>数值型数据
COMMAw.d :
读入数值型数据,将其中的逗号,$删除,并将括号转化为负号
HEXw. :
将16进制数据转化成浮点型数据
IBw.d :
读入整数二进制数据;
PERCENTw. :
将百分数转化为普通数据;
w.d :
读入标准的数值型数据。
INPUTName$16.Age3.+1Type$1.+1DateMMDDYY10.
多种输入格式综合
读入位置控制——列指针
+n–n:
控制列指针从当前位置向前或向后移动n个字符;
@n :
控制列指针指向
举例:
INPUTParkName$1-22State$Year@40AcreageCOMMA9.;
读入杂乱数据
在不确定从哪一列开始读入数据,但知道读入的数据均位于某一特定字符或字符串之后时,可采用@’character’列指针。
如:
有字符串如下,需读入Breed:
后面的字符串
MydogSamBreed:
RottweilerVetBills:
$478
〔1SAS语句:
Input@’Breed:
’DogBreed$; 读入内容:
Rottweil
读入Breed:
后面的字符串,赋给DogBreed,读入时到空格时,自动结束。
〔2SAS语句:
Input@’Breed:
’DogBreed$20.; 读入内容:
RottweilerVetBill
读入Breed:
后面的字符串,赋给DogBreed,读入字符串的长度为20。
〔3SAS语句:
Input@’Breed:
’DogBreed:
$20.; 读入内容:
Rottweiler
读入Breed:
后面的字符串,赋给DogBreed,读入字符串的长度为20,但遇到空格时不再继续读数据。
从原始数据中读入多行数据作为SAS的一条观测
使用行指针:
‘/’——到下一行读数据
‘#n’——到第n行读数据
INPUTCity$State$/NormalHighNormalLow#3RecordHighRecordLow;
从一行原始数据中读入多个观测
在Input语句末尾使用@@标示,告诉SAS继续读入本行后面的数据。
INPUTCity$State$NormalRainMeanDaysRain@@;
有选择的读入原始数据
SAS让用户无需读入所有的原始数据,然后再判断是否是用户所需要的数据。
用户仅需先读入足够的变量,以判断该条观测是否为自己所需,然后在INPUT语句后以@结尾,以使SAS读数据的指针停在此处,保留此行数据。
然后用户使用IF语句判断读入的观测是否为所需数据,若是,则使用第二个INPUT语句继续读入其余数据。
INPUTType$@;
IFType=’surface’THENDELETE;
INPUTName$9-38AMTrafficPMTraffic;
@&@@
<1> 均为锁定数据行的标示;
<2> @标示在SAS进入下个循环之前就释放锁定的数据行,而@@标示在继续锁定数据行
在INFILE语句中控制输入的选项
〔1FIRSTOBS=n:
从n条观测开始读入数据
〔2OBS=n读入n条观测
〔3当读进内存的观测长度小于INPUT语句设定的长度时
当SAS指针到达一条记录的末尾,而在INPUT语句中尚有未读入的变量时,SAS默认继续读入下一行数据。
MISSOVER:
不读入下一行数据,而将未赋值的变量以缺失值填充。
TRUNCOVER:
当使用column或格式化读入方式时,某些数据行长度小于其他数据行长度时,使用TRUNCOVER选项,可防止SAS读入下一行数据。
使用DATA步读入分隔符文件
在INFILE语句中使用DLM=选项或者DSD选项可以读入以特定符号作为分隔符的原始文件。
〔1TheDLM=option〔i.e.DLM=’&’
如果是以Tab作为分隔符,则使用DLM=’09’X命令
〔2TheDSDoption:
主要有三个功能
忽略单引号内的分隔符;
不将引号作为数据读入SAS;
将一行内连续两个单引号作为一个缺失值处理。
使用IMPORT程序步读入分隔符文件
IMPORT程序的功能
〔1 自动扫描数据文件,并确定变量的类型〔数值型或字符型;
〔2 为字符型变量,自动设定变量的长度;
〔3 识别一些日期型数据;
〔4 将两个连续的分隔符作为一个缺失值读入SAS
〔5 读入引号内数据
〔6 自动将原始数据中不存在的变量赋缺失值;
PROCIMPORTDATAFILE=’filename’OUT=data-set;
SAS根据读入文件的扩展名确定文件的类型。
若读入文件没有正确的扩展名,或者是DLM文件,用户必须在IMPORT程序步中使用DBMS=option选项。
当读入数据集的名称已经存在于SAS库中,可用REPLACE选项将原数据覆盖。
PROCIMPORTDATAFILE=’filename’OUT=data-setDBMS=identifierREPLACE;
在默认情况下,IMPORT程序步将第一行数据作为变量的名称。
若第一行数据并非变量名,可在IMPORT语句后使用GETNAMES=NO语句。
若IMPORT程序读入的是分隔符文件,默认分隔符为空格。
若不是,则需使用DILIMITER=statement语句指定分隔符。
PROCIMPORTDATAFILE=’filename’OUT=data-set
DBMS=DLMREPLACE;
GETNAMES=NO;
DELIMITER=’delimiter-character’;
RUN;
使用IMPORT程序步读入PC文件
PROCIMPORTDATAFILE=’filename’OUT=data-set
DBMS=identifierREPLACE;
列示SAS数据集的内容
PROCCONTENTSDATA=data-set;
CONTENTS程序步的功能是显示SAS对数据集的具体描述,主要内容有:
〔1 数据集描述
数据集的名称;
观测的数量;
变量的数量;
创建日期
〔2 变量描述
变量类型;
变量长度;
变量的输出格式;
变更的输入格式;
变量标识。
实例:
1.读入逗号分隔数据:
cars_novname.csv
Acura,MDX,SUV,Asia,All,"$36,945","$33,337",3.5,6,265,17,23,4451,106,189
Acura,RSXTypeS2dr,Sedan,Asia,Front,"$23,820","$21,761",2,4,200,24,31,2778,101,172
Acura,TSX4dr,Sedan,Asia,Front,"$26,990","$24,647",2.4,4,200,22,29,3230,105,183
Acura,TL4dr,Sedan,Asia,Front,"$33,195","$30,299",3.2,6,270,20,28,3575,108,186
Acura,3.5RL4dr,Sedan,Asia,Front,"$43,755","$39,014",3.5,6,225,18,24,3880,115,197
procimportdatafile="cars_novname.csv"out=mydatadbms=csvreplace;
getnames=no;
run;
proccontentsdata=mydata;
run;
SAScreatesdefaultvariablenamesasVAR1-VARnwhenvariablesnamesarenotpresentintherawdatafile.
2.读入制表键分隔的数据:
procimportdatafile="cars.txt"out=mydatadbms=tabreplace;
getnames=no;
run;
3.根据不同任务将不同的数据集永久保存到对应任务的文件夹下:
libnamedis"c:
\dissertation";
procimportdatafile="cars.txt"out=dis.mydatadbms=dlmreplace;
delimiter='09'x;
getnames=yes;
run;
3.读入空格键分隔的数据:
procimportdatafile="cars_sp.txt"out=mydatadbms=dlmreplace;
getnames=no;
run;
4.分隔符的终极例子:
Otherkindsofdelimiters
Youcanusedelimiter=ontheinfilestatementtotellSASwhatdelimiteryouareusingtoseparatevariablesinyourrawdatafile.Forexample,belowwehavearawdatafilethatusesexclamationpoints!
toseparatethevariablesinthefile.
22!
2930!
4099
17!
3350!
4749
22!
2640!
3799
20!
3250!
4816
15!
4080!
7827
Theexamplebelowshowshowtoreadthisfilebyusingdelimiter='!
'ontheinfilestatement.
DATAcars;
INFILE'readdel1.txt'DELIMITER='!
';
INPUTmpgweightprice;
RUN;
PROCPRINTDATA=cars;
RUN;
Asyoucanseeintheoutputbelow,thedatawasreadproperly.
OBS MPG WEIGHT PRICE
1 22 2930 4099
2 17 3350 4749
3 22 2640 3799
4 20 3250 4816
5 15 4080 7827
Itispossibletousemultipledelimiters.Theexamplefilebelowuseseitherexclamationpointsorplussignsasdelimiters.
22!
2930!
4099
17+3350+4749
22!
2640!
3799
20+3250+4816
15+4080!
7827
Byusingdelimiter='!
+'ontheinfilestatement,SASwillrecognizebothoftheseasvaliddelimiters.
DATAcars;
INFILE'readdel2.txt'DELIMITER='!
+';
INPUTmpgweightprice;
RUN;
PROCPRINTDATA=cars;
RUN;
Asyoucanseeintheoutputbelow,thedatawasreadproperly.
OBS MPG WEIGHT PRICE
1 22 2930 4099
2 17 3350 4749
3 22 2640 3799
4 20 3250 4816
5 15 4080 7827
import缺陷及注意事项:
Procimportdoesnotknowtheformatsforyourvariables,butitisabletoguesstheformatbasedonwhatthebeginningofyourdatasetlookslike.Mostofthetime,thisguessisfine.Butifthelengthofavariablediffersfrombeginningtoendofyourfile,youmightendupwithsometruncatedvalues.
重点语法-Infileoptions
Formorecomplicatedfilelayouts,refertotheinfileoptionsdescribedbelow.
DLM=
Thedlm=optioncanbeusedtospecifythedelimiterthatseparatesthevariablesinyourrawdatafile.Forexample,dlm=','indicatesacommaisthedelimiter
DSD
Thedsdoptionhas2functions.First,itrecognizestwoconsecutivedelimitersasamissingvalue.Forexample,ifyourfilecontainedtheline20,30,,50SASwilltreatthisas203050butwiththethedsdoptionSASwilltreatitas2030.50,whichisprobablywhatyouintended.Second,itallowsyoutoincludethedelimiterwithinquotedstrings.Forexample,youwouldwanttousethedsdoptionifyouhadacommaseparatedfileandyourdataincludedvalueslike"GeorgeBush,Jr.".Withthedsdoption,SASwillrecognizethatthecommain"GeorgeBush,Jr."ispartofthename,andnotaseparatorindicatinganewvariable.
FIRSTOBS=
ThisoptiontellsSASwhatonwhatlineyouwantittostartreadingyourrawdatafile.Ifthefirstrecordcontainsheaderinformationsuchasvariablenames,thensetfirstobs=nwherenistherecordnumberwherethedataactuallybegin.Forexample,ifyouarereadingacommaseparatedfileoratabseparatedfilethathasthevariablenamesonthefirstline,thenusefirstobs=2totellSAStobeginreadingatthesecondline
MISSOVER
ThisoptionpreventsSASfromgoingtoanewinputlineifitdoesnotfindvaluesforallofthevariablesinthecurrentlineofdata.Forexample,youmaybereadingaspacedelimitedfileandthatissupposedtohave10valuesperline,butoneofthelinehadonly9values.Withoutthemissoveroption,SASwilllookforthe10thvalueonthenextlineofdata.Ifyourdataissupposedtoonlyhaveoneobservationforeachlineofrawdata,thenthiscouldcauseerrorsthroughouttherestofyourdatafile.Ifyouhavearawdatafilethathasonerecordperline,thisoptionisaprudentmethodoftryingtokeepsucherrorsfromcascadingthroug
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sas 读入 数据 解析