SAS格式及格式化输入_第1页
SAS格式及格式化输入_第2页
SAS格式及格式化输入_第3页
SAS格式及格式化输入_第4页
SAS格式及格式化输入_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1SAS格式及格式化输入SAS的输入输出格式SAS的变量包含数值型和字符型变量。SAS系统对数值型、字符型和日期时间数据提供了许多输入、输出格式。用户可以用FORMAT过程来定义自己的格式。什么是格式(Format)?

FormatisaninstructiontheSASSystemusestodisplayorwriteeachvalueofavariable.

SAS有输入格式和输出格式。第1页/共73页输入输出格式原始数据值SAS变量的值格式化的SAS变量值Informatdollar10.Formatcomma8.548,23125JAN20041609501/25/2004InformatDate9.FormatMMDDYY10.$548,231548231Informat(输入格式)Format(输出格式)第2页/共73页输入格式输入格式是SAS系统用来读入数据值的一个指令。输入格式形式

<$>INFORMAT<W>.<D>

选项说明:通用规则:所有输入格式必须包含一个点(.)作为名字的一部分;对于省略W和D值的输入格式,使用系统缺省值。第3页/共73页输入格式使用方法INPUT语句;INPUT函数;

INFORMAT或ATTRIB语句;第4页/共73页INPUT语句,最常用情况,即格式化输入格式化输入方式是INPUT语句读取非标准数据的唯一方法。即在变量名后面规定输入格式。这种输入方式不仅给出了该输入数据所对应的类型,而且给出了输入数据所在列的长度。语句格式:INPUT<pointer-control>variableinformat.<@|@@>;INPUT<pointer-control>(variable-list)(informat-list)<@|@@>;INPUT<pointer-control>(variable-list)(<n*>informat.)<@|@@>;其中:n*规定在输入列表中后面的输入格式重复n次。第5页/共73页INPUT语句例中,从第1列开始以$8.格式读入变量name,第14列开始以yymmdd10.格式读入变量birth,右移1列,从第25列开始以5.1读入变量height例如,dataa;inputname$11.@14birthyymmdd10.@+1height5.1;cards;Wanghuacong1995/06/09178.5Zuosha1996/12/15165.8;proc

print;run;第6页/共73页INPUT函数例,字符转换数值data;x=‘39.8';y=input(x,4.1);put

x=y=;run;例中,INPUT函数将字符变量X的值39.8,通过输入格式4.1转换为一个数值39.8,赋给变量Y,因此Y为数值型变量第7页/共73页例,数值转换为字符时会产生不正确结果例中,产生的结果为255,不正确;除非增加输入格式的长度,如y=input(x,$15.);此时,最常用的做法是使用put函数,而不是input函数data;x=2557898;

y=put(x,$8.);puty;run;data;x=2557898;

y=input(x,$8.);puty;run;第8页/共73页用INFORMAT语句或ATTRIB语句例,DATA步中用INFORMAT语句dataa;inputname$11.birthheight;informatbirthyymmdd10.height5.1;cards;Wanghuacong1995/06/09178.5Zuosha1996/12/15165.8;proc

print;run;第9页/共73页输入格式1、数值型变量输入格式几个常用的格式:

w.d:读入标准数值数据

COMMAw.d:用于数据中包含逗号(,)的数据形式

DOLLARw.d:用于数据前面有美元符($)的数据形式说明:

w:宽度,表示数值域所含的列数。小数点占一列。

d:小数位数。d可以省略。例如:

5.2,表示该变量的数据占5列,其中后两位是小数位。

注意:一定要弄清数据占据的列数,否则极易出错。第10页/共73页dataa;inputxcomma7.ycomma7.;cards;12,00234,2312,21021,311;run;proc

print;run;OUTPUT:Obsxy

1

12002

34231

2

2210

21311例1.有如下两列数据,数据中包有逗号,请建立一个SAS数据集,变量为x、y。12,00234,2312,21021,311数字7是怎么来的?第11页/共73页dataa;inputxcomma7.2ycomma7.4;cards;12,00234,2312,21021,311;run;proc

print;run;OUTPUT:Obsxy

1

120.02

3.4231

2

22.10

2.1311例2.有如下两列数据,其中第一列后两位数字为小数,第二列后4位为小数,例如第一个数据12,002读入后应为120.02。请建立一个SAS数据集,变量为x、y。12,00234,2312,21021,311第12页/共73页dataa;inputxdollar8.ydollar8.;cards;$12,002$34,231$2,210$21,311;run;proc

print;run;OUTPUT:Obsxy

1

12002

34231

2

2210

21311例3.有如下两列数据,数据中包有$和逗号,请建立一个SAS数据集,变量为x、y。(例如$12,002读入后应为12002)$12,002$34,231$2,210$21,311第13页/共73页dataa;inputxdollar8.2ydollar8.4;cards;$12,002$34,231$2,210$21,311;run;proc

print;run;OUTPUT:Obsxy

1

120.02

3.4231

2

22.10

2.1311例4.有如下两列数据,其中第一列后两位数字为小数,第二列后4位为小数,例如第一个数据$12,002读入后应为120.02。请建立一个SAS数据集,变量为x、y。$12,002$34,231$2,210$21,311第14页/共73页$w.输入格式

读入标准字符数据。在读入字符值之前,$w.输入格式清除字符值开头的空格。$w.输入格式把一个点(.)转换为空格,因为它把一个点看作缺失值。

输出结果:xyz

uvw2.字符型变量输入格式例,读入数据时,清除数据开头空格并将(.)转换为缺失值。Dataa;inputname$5.;cards;xyz.uvw;optionsnocenter;proc

print

noobs;run;第15页/共73页$CHARw.输入格式读含有空格的字符数据。$CHARw.输入格式除了不清除字符值开头的空作格外,它等同于标准的$w.输入格式。例,保留开头和结尾的空格。data;inputname$char10.;cards;xyz.uvw;optionsnocenter;proc

print

noobs;run;INPUT语句采取自由格式输入时,INFORMAT或ATTRIB语句中不能使用$CHAR.输入格式,因为SAS把空格看作数据行中数值间的分隔符。输出结果:xyz.uvw第16页/共73页$CHARw.:读取包含空格的连续字符

例5.下面是一些人名,请将其读入到一个变量NAME中,注意:姓和名之间有一个空格,建立的SAS数据集如右边的形式。BillClintonGeorgeBushTonyBlairSaddamHusseinVladimirPutinObsname1BillClinton2GeorgeBush3TonyBlair4SaddamHussein5VladimirPutin第17页/共73页dataa;inputname$char14.;cards;BillClintonGeorgeBushTonyBlairSaddamHusseinVladimirPutin;procprint;run;Obsname1BillClinton2GeorgeBush3TonyBlair4SaddamHussein5VladimirPutin如果将char14.去掉,语句改为:inputname$;结果是什么样的呢?第18页/共73页日期和时间数据的存储SAS采用数值存储日期和时间形式的数据。在默认情况下,SAS系统以0代表1960年1月1日0时。其它日期在SAS系统中被存储为与该日期相差的天数。例如,1960年1月3日,在系统中存为2。

2004年1月25日,在系统中存为16095。注意:为了使数值型变量显示日期形式,必须使用日期型的输出格式,同样地为了以日期形式输入日期必须使用日期型的输入格式。

3、日期数据输入格式第19页/共73页日期数据的读入通常需要运用日期型的格式第20页/共73页日期时间输出格式日期型数据的输入输出格式大部份是相同的,下面是几个常用的:第21页/共73页该例中日期数据的形式是什么样的?例6.有如下的日期数据,请建立一个SAS数据集EX6存储,并以日期的形式显示出来。1Jan200203Jan200315/May/200412-FEB-200517*May*%20061**OCT**200730%sep%//2008DDMMMYYYY故选择DATEw.输入格式第22页/共73页datab;inputdddate15.;formatdddate9.;cards;1Jan200203Jan200315/May/200412-FEB-200517*May*%20061**OCT**200730%sep%//2008;proc

print;run;Obsdd101JAN2002203JAN2003315MAY2004412FEB2005517MAY2006601OCT2007730SEP2008第23页/共73页例7.有如下的日期数据,请建立一个SAS数据集EX7存储,并以日期的形式显示出来。01312002031220035132004421200552520061/2/20073-24-2008该例中日期数据的形式是什么样的?MMDDYYYY故选择MMDDYY10.输入格式第24页/共73页01312002031220035132004421200552520061/2/20073-24-2008datab;inputddmmddyy10.;formatddmmddyy10.;cards;01312002031220035132004421200552520061/2/20073-24-2008;proc

print;run;Obsdd101/31/2002203/12/2003305/13/2004404/21/2005505/25/2006601/02/2007703/24/2008第25页/共73页输出格式选项说明:

输出格式是SAS系统用来输出数据值的一个指令。

输出格式形式<$>FORMAT<w>.<d>第26页/共73页通用规则:所有输出格式必须包含一个点(.)作为名字的一部分;省略W和D的值时,使用系统的缺省值;无论怎样规定输出格式中的小数位,输出格式都不会影响存贮的数据值;规定的输出格式宽度太窄小时,对字符格式截去右边的字符,对数值格式转换为BESTw.的格式;使用一个不协调的输出格式时,SAS系统首先试着使用其它类型的类似格式。如果行不通,将输出一个错误信息在SAS日志。第27页/共73页输出格式类型数值输出格式;字符输出格式;日期时间输出格式;使用FORMAT过程创建的自定义输出格式。第28页/共73页输出格式使用方法DATA步中用FORMAT或ATTRIB语句;

PROC步中用FORMAT或ATTRIB语句。PUT语句;PUT函数;第29页/共73页FORMAT或ATTRIB语句,最常用方式数据步中使用dataa;inputxcomma7.ycomma7.;formatxydollar8.;cards;12,00234,2312,21021,311;run;proc

print;run;过程步中使用format语句proc

print;formatxcomma7.ydollar8.;run;过程步中使用attrib语句proc

print;attribxyformat=comma7.;run;第30页/共73页PUT语句在PUT语句中使用输出格式data;x=1145.32;putxdollar10.2;

putxcomma8.2;run;结果为:$1,145.321,145.32第31页/共73页PUT函数PUT函数对于将数值转换为字符,或者改变字符输出格式dataa;birth=16095;birthtext=put(birth,yymmdd10.);putbirthtext=;putbirth=;run;LOG窗口输出结果birthtext=2004-01-25birth=16095第32页/共73页常用数值变量输出格式第33页/共73页例子dataa;x=123456789;y=1230000;z=12345;putxbest7./ybest7./zbest7.;putx8.2;putx11.2;putx12.2;putydollar8.;putydollar10.;run;Log窗口输出结果----+----+----+1.235E81230000

123451.2346E8123456789.0123456789.00$1230000$1,230,000可以看到SAS会根据指定的输出宽度选择最合适的输出形式,以满足指定的宽度。例如,putydollar8.;由于数据本身有7位,因此输出时仅添加了一个$符号,而未添加千分位的逗号(,),见倒数第二输出。第34页/共73页自定义格式使用PROC

FORMAT过程进行格式的自定义。PROCFORMAT;INVALUE格式名格式;VALUE格式名格式;其中,invalue定义输入格式,value定义输出格式。第35页/共73页自定义输入格式,语法PROC

FORMAT;INVALUE<$>格式名定义的输入格式;RUN;格式名:应符合SAS的命名要求(但不能超过8个字符),注意最后一个字符不能是数字。定义的输入格式:原始值=格式化的输入值当格式化的输入值为字符时,这字符型输入格式,名字前加$,否则为数值型输入格式如,invaluesexinf“F”=1“M”=2;invalue$sexicf“F”=“Female”“M”=“Male”;第36页/共73页Invalue语句自定义输入格式2355SOOS588922223878CEEE44090111398533320740SEES2398EECC5162CCCE442132227385CCCN例,下列数据中的字母O,S,E,C,N分别赋值为4,3,2,1,0,使用输入格式读入数据,并全部转化为数值。(5个变量)第37页/共73页PROCFORMAT;INVALUEscoref'O'=4

'S'=3

'E'=2

'C'=1

'N'=0

;RUN;首先建立输入格式(数值型,等号右边为数值)第38页/共73页使用自定义的格式scorefdataa;inputidx1scoref.@+1x2scoref.@+1x3scoref.@+1x4scoref.;cards;2355SOOS588922223878CEEE44090111398533320740SEES2398EECC5162CCCE442132227385CCCN;proc

print;run;输出结果Obsidx1x2x3x4123553443258892222338781222444090111539853332674032237239822118516211129442132221073851110第39页/共73页PROCFORMAT;INVALUE$sexf‘M’=‘Male’‘F’=‘Female’;RUN;建立字符型输入格式datab;inputsex:$sexf.age;cards;F25m22f23F21M23;proc

print;run;输出结果:Obssexage1Female252m223f234Female215Male23小写字母未正确替换!第40页/共73页PROCFORMAT;INVALUE$sexf(upcase)‘M’=‘Male’‘F’=‘Female’;RUN;添加选项upcase,重新运行datab;inputsex:$sexf.age;cards;F25m22f23F21M23;proc

print;run;输出结果:Obssexage1Female252Male223Female234Female215Male23小写字母正确替换!第41页/共73页自定义输出格式,语法PROC

FORMAT;VALUE自定义输出格式名字定义的格式;RUN;自定义输出格式名字:应符合SAS的命名要求(不能超过8个字符),注意最后一个字符不能是数字。定义的格式:原始值=格式化的输出值注:原始值为数值型,则为数值型格式;否则为字符型格式,此时格式名前需加$符号如:valuetestf

1-5=“1-5”6-<10=“6-10”10-high=“>=10”;valueynf1=“是”2=“否”;value$grpf“A”=“试验组”

“B”=“对照组”;第42页/共73页例8.下面是我们班“问卷调查”资料的部份数据。变量sex的赋值是:1=Male,2=Female,变量Band46的赋值是:A=增加,B=不变,C=减弱,请建立一个SAS数据集EX8,对变量sex、Band46进行格式化。第43页/共73页dataqespart;inputid$sexheightweightband46$;cards;cnw1r01 2 154 49 Ccnw1r02 1 169 64 Bcnw1r04 1 169 67 Acnw1r05 2 153 50 Bcnw1r06 2 160 50 Acnw2r02 2 156 46 Acnw2r03 1 173 62 Bcnw2r04 1 168 57 Bcnw2r05 2 155 45 B;run;procprint;run;Obsidsexheightweightband461cnw1r01215449C2cnw1r02116964B3cnw1r04116967A4cnw1r05215350B5cnw1r06216050A6cnw2r02215646A7cnw2r03117362B8cnw2r04116857B9cnw2r05215545B第44页/共73页PROCFORMAT;VALUEsexfmt

1='Male'

2='Female'

;VALUE$bandfmt

'A'='增加'

'B'='不变'

'C'='减弱'

;RUN;首先建立相应的输出格式上面建立了两种类型的输出格式:一种是数值型的,即sexfmt,要求=号左边为数值型数值或区间,如上面的1、2为数值;另一种是字符型的,即$bandfmt,$表明该格式是字符型,要求=号左边为字符或字符区间,如‘A’

、‘B’、‘C’

。第45页/共73页DATAqesfmt;SETqespart;FORMATSexsexfmt.Band46bandfmt.;RUN;PROC

Print;RUN;Obsidsexheightweightband461cnw1r01Female15449减弱2cnw1r02Male16964不变3cnw1r04Male16967增加4cnw1r05Female15350不变5cnw1r06Female16050增加6cnw2r02Female15646增加7cnw2r03Male17362不变8cnw2r04Male16857不变9cnw2r05Female15545不变格式化后打印输出的数据对变量进行格式化第46页/共73页PROCFORMAT;VALUEheighfmt

LOW-<150=‘<150'

150-<155=‘150-155‘155-<160=‘155-160‘160-<165=‘160-165‘165-<170=‘165-170‘170-<175=‘170-175‘175-<180=‘175-180‘180-HIGH=‘>=180‘;RUN;利用格式对连续型变量的离散化分组(频数表编制)例9.对“问卷调查”资料中的身高编制频数表,组距取5CM,小于150为第一组,150-155为第二组……在数据步中运用格式:Formatheightheighfmt.;加标签:labelheight=‘身高’;第47页/共73页Obsclassid身高weight134cnw1l01175-18070.0234cnw1l02175-18070.0334cnw1l03155-16047.0434cnw1l04160-16548.0heightFrequencyPercentCumulative

FrequencyCumulative

Percent150-1551914.181914.18155-1602216.424130.60160-1653828.367958.96165-1702014.939973.88170-1752115.6712089.55175-180107.4613097.01>=18042.99134100.00打印数据集的内容(部份)用FREQ过程生成的频数表第48页/共73页SASsystemHelp“索引”输入“FORMATprocedure”第49页/共73页列表方式输入

简单列表方式输入INPUT<pointer-control>variable<$><&><@|@@>;调整列表方式输入INPUT<pointer-control>variable<:|&|~><informat.><@|@@>;第50页/共73页列表方式输入使用条件输入数据值之间至少有一个空格隔开;用小数点表示表示缺失值;字符型值的默认长度为8个字节,也可以用LENGTH,ATTRIB,INFORMAT语句规定长度;数据必须是字符数据或标准的数值数据。第51页/共73页列表方式输入格式修饰符

‘:’当原始数据是以空格为分隔符时,要想对变量值长度不一致的变量规定统一长度就必须用到该格式修饰符。规定变量值是从非空格列中读取,直到第一次遇到以下三种情况之一,该变量值的读取过程才结束:下一个空格列达到变量预先设定的长度数据行结束第52页/共73页例,

空格为分隔符时,对变量值长度不一致的变量规定统一长度。data;InputUniv:$12.Plc$Zip;cards;MITBoston100023TsinghuaUnivBeijing100084;例中,第一个观测变量Univ的值为MIT(只读3个字符,因遇到空格而结束)第二个观测值为TsinghuaUniv(得到先前定义的变量长度12)。如果只对变量Univ规定长度,而不加格式修饰符(:),在读入第一条记录时就会出错,如果不对变量Univ规定长度,读入第二条记录时就会只读入Tsinghua,而不是预先要读入的TsinghuaUniv,这是因为SAS默认的字符变量的存储长度就是8个字节。第53页/共73页UnivPlcZipMITBoston100023TsinghuaUnivBeijing100084加格式修饰符(:)不加格式修饰符(:)UnivPlc

ZipMIT

Boston100023

.第54页/共73页‘&’读入包含空格的数据因为空格是列表读入方式默认的分隔符,所以,如果要读入的数据值本身包括空格时就必须用此格式符。注意:数据项之间至少两个空格例,

空格为分隔符时,字符型输入值嵌有空格。data;inputname&$12.age;cards;JiangZhu20AnnieZheng31I.Altman60;run;例中,第一个观测name中JiangZhu(包含一个空格),第二个观测为AnnieZheng(包含一个空格)。分隔符为两个空格。第55页/共73页‘~’规定读入字符值时保留引号。此选项只在INFILE语句中与选项DSD一起使用时才有效。DSD选项的4个功能:将默认分隔符改为逗号;对于连续的两个分隔符,中间按缺失值处理;将字符变量值的引号去掉;对引号里的分隔符按字符来对待。所以INFILE语句中的DSD选项自动把数据记录的分隔符设置为逗号,并且读入数据之前,把字符数据中的引号去掉,若加上“~”就会保留数据中的引号。第56页/共73页理解DSD和“~”的作用例,

读入字符值时保留引号datatopics2;infiledatalinesdsd;inputspeakers:$15.title~$40.location&$10.;datalines;Song,"CreditDerivatives",Room329Zhu,"CreditRiskManagement",Room406;proc

print;run;可以看出,“~”包含“:”选项的功能。例中,虽然title变量的长度是40,而观测值得长度都不到40,仍然可以得到正确结果。所以“~”包含“:”的功能。

第57页/共73页把speakers后面的“:”改成了“~”也可以。例如:datatopics2;infiledatalinesdsd;inputspeakers~$15.title~$40.location&$10.;datalines;Song,"CreditDerivatives",Room329Zhu,"CreditRiskManagement",Room406;procprint;run;输出窗口信息:Obsspeakerstitlelocation1Song"CreditDerivatives"Room3292Zhu"CreditRiskManagement"Room406第58页/共73页但是,若把title后成的“~”改成“:”,引号就因为dsd选项的存在被去掉。如下:datatopics2;infiledatalinesdsd;inputspeakers:$15.title:$40.location&$10.;datalines;Song,"CreditDerivatives",Room329Zhu,"CreditRiskManagement",Room406;proc

print;run;输出窗口信息Obsspeakerstitlelocation1SongCreditDerivativesRoom3292ZhuCreditRiskManagementRoom406第59页/共73页列方式输入列输入方式是用来读入严格按列排好的标准数据INPUT变量名<$>开始列-结束列<.小数位><@>;条件:同一变量原始数据值在相同的列中原始数据是标准的数值格式或一般字符格式特点:1.可以按任意顺序读入数据

2.字符型数据中间可以有空格

3.可以重复读取原始数据中的某一部份

4.空格和小数点都作为缺失值处理

5.忽略开始和结尾部分的空格第60页/共73页按列读入dataa;inputques$1-17age18-20gender$21-26city$27-34;cards;Iamhereforyou23male大连Areyouthere26female重庆hahamale哈尔滨yesiamhere30female;proc

print;run;第61页/共73页手机号码信息分解手机号码一编码规则一般是:YYY-XXXX-ZZZZ,其YYY为号段;XXXX一般为所在地区编码;ZZZZ为对应的个人识别编号。说明:

移动:134-139、150、151、152、157、158、159、188

联通:130、131、132、155、156

电信:133、153、180、1891357851051X1508311759X1327313520X1556443719X1804346016X1513441713X1308279203X1897876466X第62页/共73页可重复读入datab;inputx11-3x24-7x3$8-11x4$1-11;cards;1357851051X1508311759X1327313520X1556443719X1804346016X1513441713X1308279203X1897876466X;proc

prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论