




已阅读5页,还剩87页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章变量输入输出格式,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,本章内容包括:,输入格式;输出格式;SAS日期时间存贮方式;日期时间输入格式;日期时间输出格式;缺失值处理。,输入格式,输入格式是SAS系统用来读入数据值的一个指令。输入格式形式INFORMAT.选项说明:通用规则:所有输入格式必须包含一个点(.)作为名字的一部分;对于省略W和D值的输入格式,使用系统缺省值。,输入格式使用方法,INPUT语句;INPUT函数;DATA步中用INFORMAT或ATTRIB语句;PROC步中用INFORMAT或ATTRIB语句。,INPUT语句,例13.1列格式输入。input6dateddmmyy10.+1stocd$8.oppr8.2;例中,从第6列开始以DDMMYY10.格式读入变量DATE,第7列开始以长度为8的字符格式读入变量STOCD,然后以数值格式8.2读入变量OPPR。,INPUT函数,例13.2字符转换数值。data;x=98.6;y=input(x,4.);putx=y=;run;例中,INPUT函数和w.d输入格式将X的字符值转换为一个数值Y.INPUT函数对于数据的转换是很有用的,当然,有更简单的方法将字符值转换为数值。data;x=98.6;y=x-0;putx=y=;run;,例13.3数值转换为字符时会产生不正确结果。data;x=2557898;y=input(x,$8.);puty;run;例中,产生的结果为255,不正确。,例13.4PUT函数将数值转换为字符。data;x=2557898;y=put(x,$8.);puty;run;例中,用PUT函数得到正确结果,即字符型2557898.data;x=2557898;y=put(x,$3.);puty;run;例中,Y的结果为3E6.,在DATA步中用INFORMAT语句或ATTRIB语句,例13.5DATA步中用INFORMAT语句。dataa;inputx;informatxcomma12.4;cards;12,345.123422,345.1234;run;例中,最好就是只用INFORMAT语句,不要用ATTRIB,这样可以少记些东西。,永久性与临时性联系,DATA步规定的输入格式是永久联系的;PROC步规定的输入格式是临时联系的。,输入格式类型,数值输入格式;字符输入格式;日期时间输入格式;竖式二进制数输入格式;使用FORMAT过程自定义的输入格式。,w.d输入格式,读入标准数值数据。例13.6INPUT语句对变量使用列指针控制和w.d的输入格式。INPUTX8.2;INPUTX1-10.2;W.D输入格式把一个点(.)作为缺失值。用W.D输入格式时,数值域尾部的空白不表示0,用BZ.输入格式可以把尾部空白读为0.,数值变量输入格式,COMMAw.d输入格式,COMMAw.d输入格式读入包含字符的数值。数值数据内可能包含的字符有:逗号;空格;$;%;破折号;圆括号等。例13.8读入带千分号的数据。dataa;inputxcomma12.2;cards;12,522.2315;run;,例13.10数值变量输入格式应用举例。data;informatx8.2;x=12345.1234;putx=;run;dataa;x=12345.1234;informatx12.4;formatx8.2;putx=;run;dataa;inputx;informatxcomma12.4;cards;12,345.123422,345.1234;run;,结果显示x=12345.1234.结果显示x=12345.12.,$w.输入格式,读入标准字符数据。在读入字符值之前,$w.输入格式清除字符值开头的空格。$w.输入格式把一个点(.)转换为空格,因为它把一个点看作缺失值。例13.11读入数据时,清除数据开头空格并将(.)转换为缺失值。data;inputname$5.;cards;xyz.uvw;optionsnocenter;procprintnoobs;run;,输出结果:xyzuvw,字符变量输入格式,$CHARw输入格式,读含有空格的字符数据。$CHARw.输入格式除了不清除字符值开头的空作格外,它等同于标准的$w.输入格式。例13.12保留开头和结尾的空格。data;inputname$char10.;cards;xyz.uvw;optionsnocenter;procprintnoobs;run;INPUT语句采取自由格式输入时,INFORMAT或ATTRIB语句中不能使用$CHAR.输入格式,因为SAS把空格看作数据行中数值间的分隔符。,输出结果:xyz.uvw,例13.13不能放放在一起使用的语句。informatx$char12.;inputxyz;例13.14直接赋值为字符型变量。dataa;x1=st92;x2=st92;informatx$8.;x3=12,345.1234;run;,输出格式,输出格式是SAS系统用来输出数据值的一个指令。输出格式形式FORMAT.选项说明:,通用规则:所有输出格式必须包含一个点(.)作为名字的一部分;省略W和D的值时,使用系统的缺省值;无论怎样规定输出格式中的小数位,输出格式都不会影响存贮的数据值;规定的输出格式宽度太窄小时,对字符格式截去右边的字符,对数值格式转换为BESTw.的格式;使用一个不协调的输出格式时,SAS系统首先试着使用其它类型的类似格式。如果行不通,将输出一个错误信息在SAS日志。,输出格式使用方法,PUT语句;PUT函数;DATA步中用FORMAT或ATTRIB语句;PROC步中用FORMAT或ATTRIB语句。,PUT语句,例13.15PUT语句中使用输出格式。data;x=1145.32;putxdollar10.2;run;结果为$1,145.32。输出格式带千分号和美元号。,PUT函数,PUT函数对于将数值转换为字符,或者改变变量的字符输出格式是很有用的。例13.16PUT函数中使用输入格式。data;cc=16;cchex=put(cc,hex3.);putcchex3.;run;结果为010.例中,转换数值变量cc的值为三个字符的十六进制表达式。data;cc=16;cc=put(cc,3.);run;例中,将数值CC转换为字符值。,DATA步中用FORMAT或ATTRIB语句,例13.17DATA步中用FORMAT或ATTRIB语句。formatsales1-sales12comma10.2;例中,FORMAT语句对变量sales1至sales12规定输出格式COMMAw.d.attribsales1-sales12format=comma10.2;例中,ATTRIB语句对变量sales1至sales12规定输出格式COMMAw.d.,输出格式类型,数值输出格式;字符输出格式;日期时间输出格式;使用FORMAT过程创建的自定义输出格式。,w.d输出格式,输出标准数值数据。对超出输出格式宽度的数值进行四舍五入。数值过大时,使用BESTw.输出。例13.18w.d输出格式应用。dataa;x=23.45;putx6.3;run;结果是23.450。例13.19使用列输出法等价于使用指针控制和w.d的格式。putx1-8.2;put1x8.2;例中,两个语句等价。,数值变量输出格式,BESTw.格式,没有对变量规定输出格式时,使用BEST.的格式。SAS在规定的宽度列数中选择能够给出该值最多信息的表示法作为输出格式。SAS仍存贮原来的完整数值。,例13.20用不同的BESTw.形式输出时,显示结果不一样,但在SAS存贮的都是原来的完整数值。data;x=12570000;put10 xbest6.;run;输出值为1.26E6。正确地输出这个值需要8列,使用E表示法把这个值压缩为6列.data;x=12570000;put10 xbest3.;run;输出值为1E6.data;x=12570000;put10 xbest2.;run;输出值为*.,Ew.输出格式,例13.22用科学记数法表示输出数值。data;x=1257;put10 xe10.;run;输出值为1.257E+03,共占9列。,输入输出控制流程,输入-存储-输出控制流程,$w.输出格式,$w.是最常用的字符数据输出格,w值给出输出字符值的列数。例13.24$w.和列输出格式产生同样效果。data;name=ABC;put10name$3.;putname$10-12;run;例中,都输出值为ABC.,字符变量输出格式,日期时间存贮方式,SAS日期值存贮方式SAS系统存贮日期值为1960年1月1日到这个日期之间的天数。日期存贮方式举例,例13.25表中天数的计算程序。data;date=mdy(1,1,1960);putdate8.;date=mdy(3,3,1962);putdate8.;date=mdy(8,4,1985);putdate8.;date=mdy(10,1,2002);putdate8.;date=mdy(7,4,1776);putdate8.;run;,SAS日期时间值存贮方式,SAS存贮时间值从0时开始以秒记数。日期时间值存贮方式举例,例13.26表中秒数的计算程序。data;hms=hms(21,50,51);puthms=;x=21*60*60+50*60+51;putx=;date=mdy(10,1,2002);putdate=;dhms=dhms(date,21,50,51);putdhms=;y=date*24*3600+x;puty=;run;,日期时间输入格式,应用举例,例1327使用SAS日期时间的输入格式。dataa;inputdatemmddyy10.;cards;10-01-200210/01/2002;run;,日期时间输出格式,假定日期时间值为2003年3月27日12点5分5.49秒,星期四,为2003年的第86天,第1季度,所在周的第5天。,例13.28使用SAS日期时间的输出格式。dataa;inputdatemmddyy10.;formatdateyymmdd10.;putdate=;cards;10-01-200210/01/2002;run;dataa;inputdatemmddyy10.;formatdatedate9.;putdate=;cards;10-01-200210/01/2002;run;,data;x=put(today(),date7.);putx;y=put(today(),8.0);puty;z=today();putz;u=put(15260,yymmdd10.);putu;v=put(15260,date9.);putv;run;显示结果:19SEP0215602156022001-10-1212OCT2001,data;x=13807;formatxyymmdd10.;putx=;run;显示结果:x=1997-10-20data;date=11oct2001d;putdate=;formatdateyymmdd10.;run;显示结果:date=2001-10-11,缺失值处理,读入含缺失值的数据可以表示缺失值的字符有:空格;点;MISSING语句规定的字符。例13.29空格表示缺失值的数据适合列方式读入。dataa;inputname$1-5test17-8test210-11;cards;ann9296susan84bill81;run;例中,SUSAN第一次测验缺席,BIL第二次测验缺席,空格表示缺失值。,例13.30点表示缺失值的数据适合自由方式读入。datab;inputname$test1test2;cards;ann9296susan.84bill81.;run;例13.31读入由MISSING语句规定缺失值的数据。datac;MissingA;inputname$test1test2;cards;ann9296susanA84bill81A;run;,系统产生的缺失值,SAS系统产生缺失值的情况有三种:算术运算;非法运算符;非法字符转换为数值。,第9章数据步变量与变量属性控制,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,本章内容,本章介绍利用数据步变量与信息控制语句进行数据加工整理。数据步变量与信息控制语句规定数据集中变量个数及相关信息。变量与信息控制语句不是执行语句,可以出现数据步的任何地方,且功能相同。,ARRAY语句,ARRAY语句用于定义数组。数组通常由一组变量构成。利用数组可以简化很多复杂的数据处理过程。SAS系统引用数组等价引用构成数组的那一组变量。,显式下标数组语句,显式下标数组由数组名,元素个数说明,及元素列表等构成。通过数组名引用整个数组,通过数组元素序号(也称为下标)引用该元素。语句格式ARRAYarray-namesubscript;选项说明:,下标的三种格式,下标用于表示数组中元素的个数和排列的范围。括号可用大括号,中括号或圆括号。下标格式有三种:,例9.1用格式一定义一维、二维数组。Arraysimple3red,green,yellow;/*定义一维数组*/例中,数组名为simple,数组有三个元素,对应的变量命名分别为red,green,yellow.Arrayx5,3scorel-score15;/*定义二维数组*/例中,数组名为X,15个变量scorel-score15按顺序从左上角开始逐行放入这个二维数组。例9.2用格式二定义二维数组。Arrayx1:5,1:3scorel-score15;当用1作为数组下界时可以省略。注意:用0作为下界时,可以加快处理时间,因为计算下标的时间减少了。,数组元素表示方法,数组元素必须全是数值变量,或全是字符变量,可以用任意顺序列出。数组元素的两种表示方法:列出变量名;建立临时数组元素列表。例9.3列出变量名。ArrayC3Cl-C3;ArrayC3;/*和上例句等价*/ArrayA*_NUMERIC_;ArrayA*_CHARACTER_;,建立临时数组元素列表:,_TEMPORARY_;使用临时数组元素列表可以少占用内存,加快执行时间。可以像使用DATA步中变量那样使用临时数组元素,但要注意有下面几点不同:它们没有名字,引用时必须用数组名和下标;不能出现在输出的数据集上;不能用特殊下标(*)来引用所有元素;临时数组元素的值被自动保存,而不是像DATA步中的变量,在下一次重复开始时被置为缺失值。,例9.4建立临时数组元素。若用如下程序,则会产生新变量t1,t2,t3;dataa;setResDat.class;arrayt(3)(5,10,15);run;若用临时数组,则不会产生新变量dataa;setResDat.class;arrayt(3)_temporary_(5,10,15);run;,使用临时数组,不用临时数组,初始值表示方法,例9.5数组元素和初值通过对应位置来确定。arraytest(3)t1t2t3(908070);arrayab(5)(543);例中,第一个语句数组元素的个数与初值的个数相同,把初值90,80和70依次赋给变量t1,t1和t3。第二个语句分配5给ab1,4给ab2,3给ab3,因数组元素比给出的初始值多,多余的变量ab4和ab5为缺失值,而且SAS系统将发布一个警告信息。,应用举例,例9.6定义数组例句。arrayrain5x1-x5;arrayab(*)xyz;arrayx*_numeric_;arraytest(3)_temporary_(908070);arraydays7d1-d7;arrayx2:5greenreddenatofetzer;arraytest(3:4,3:7)test1-test10;,引用显式下标数组元素,凡是可用表达式的地方,都可以使用数组元素。例9.7通过下标引用数组元素。datanew;inputqa1-qa10qb1-qb10;arraytest10qa1-qa5qb1-qb5;puttest4=test6=;cards;11161111118222222222;例中,输出qa1和qb1的值,即数组元素test(4)引用qa4,数组元素test(6)引用qb1.一个数组的定义仅在当前的DATA步有效。如果想在几个DATA步引用同一个数组,必须在每个DATA步中都定义这个数组。,455datanew;456inputqa1-qa10qb1-qb10;457arraytest10qa1-qa5qb1-qb5;458puttest4=test6=;459cards;qa4=6qb1=8NOTE:数据集WORK.NEW有1个观测和20个变量。NOTE:“DATA语句”所用时间(总处理时间):实际时间0.01秒CPU时间0.01秒461;,例9.9规定数组的一些特殊元素作为循环DO语句范围。arrayday(7)d1-d7;doi=2to4;doi=1to7by2;doi=1,3;例中,处理数组DAY中选定的一些特殊元素。,循环DO组中引用,例9.10一个循环DO组里处理多个数组。arrayday(*)d1-d4;doi=1todim(day);day(i)=day(i)+10;end;例中,循环DO语句里使用DIM函数得到数组中元素的个数。用DIM函数作为DO语句上界时,这个上界会根据数组元素个数的实际情况自动调整,用DIM函数作为DO语句上界的所有语句都不必改动。,例9.10引用规定上下界的一维数组。Arrayyrs76:85year76-year85;doi=76to85;ifyrs(i)=9thenyrs(i)=.;end;doi=lbound(yrs)tohbound(yrs);ifyrs(i)=9thenyrs(i)=.;end;例中,两个DO组是等价的。第二个DO组中LBOUND函数取数组YRS的下界,而HBOUND函数取YRS的上界。,DOWHILE和DOUNTIL组引用,使用DOWHILE或DOUNTIL语句处理数组时,首先要创造循环变量,然后利用数组说明实现DOWHILE或DOUNTIL语句的条件,最后使用程序语句来改变循环变量的值。,例9.13DOWHILE语句用法。datatest;inputx1-x5y;arrayt(5)x1-x5;i=1;dowhile(t(i)y);putt(i)=y=;i=i+1;end;cards;123453024686;run;,482datatest;483inputx1-x5y;484arrayt(5)x1-x5;485i=1;486dowhile(t(i);其中:variable-specification变量说明项;DEFAULT=n规定新创建数值变量值的缺省字节长度从8改为n值。,variable-specification选项的格式,变量说明项格式:variable-1length相关选项说明:,控制变量长度方法,用LENGTH语句或ATTRIB语句都可以指定变量的长度。任意一个用LENGTH语句规定的长度可以用ATTRIB语句改变它,反之亦然。变量的长度依赖于:是数值还是字符变量;变量是如何创建的;有没有LENGTH或ATTRIB语句。,数值变量长度控制,在SAS数据集中数值变量的存贮长度一般为8个字节(byte)。然而很多值可以用小于8个字节的长度准确地表示。当数据集很大时,使用小于8个字节长度来存贮不需要很精确的值时,可以有效地减少外部存贮的要求。注意:用LENGTH语句截短数据时,可能会引起误差。,例9.28截短数据引起的误差问题。dataone;inputa1-4b6.;lengthdefault=3;cards;1.461.251.141.341.351.362.03;datatwo;setone;ifa=1.3;run;例中,数据集TWO中没有观测。因为,第二个DATA步的子集IF语句中的常数1.3用8个字节表示,而数据集ONE中变量A按LENGTH语句规定只有3个字节,因此A不会等于1.3.,字符变量长度控制,如果不用LENGTH或ATTRIB语句规定变量的长度,字符变量的缺省长由它的第一个观测值决定,这样,后面更长的观测值会被截短。因INPUT语句可隐含地说明字符变量的长度。所以,当LENGTH语句定义的字符长度不同于在INPUT语句中隐含表示的长度时,LENGTH语句应放在INPUT语句前面。,例9.29LENGTH语句必须放在INPUT语句前面才能起作用。dataa;lengthname$20;inputname$1-10;cards;(数据行);run;例中,INPUT语句隐含指定变量NAME的长度为10。LENGTH语句(放在INPUT语句前面)给出在创建的数据集A中NAME的长度用20替代10。,例9.30字符变量的长由它的第一个观测值决定。datab;inputx;ifx=1theny=no;elsey=yes;Cards;15;run;例中,字符变量Y第一次在赋值语句Y=NO中出现时,它的长度被确定为2。于是,当把YES赋给Y时,仅前两个字符被存储,S丢失了。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025双学位会计考试题及答案
- 绕组线漆包工岗前情绪管理考核试卷含答案
- 贝类繁育工岗后知识考核试卷含答案
- 人教版七年级音乐上册(简谱)第5单元《第2课 甘兰美》说课稿
- 修笔工安全综合考核试卷含答案
- 野生动物实验辅助工安全综合竞赛考核试卷含答案
- 工具钳工安全风险考核试卷含答案
- 吉林油田第十二中学2025-2026学年度第一学期初三化学阶段测试卷(含答案)
- 七年级历史下册 第二单元 辽宋夏金元时期:民族关系发展和社会变化 第6课 北宋的政治说课稿 新人教版
- 2025年专用仪器仪表:化工仪表项目发展计划
- 物流运输托运单模板
- 课堂教学评价指标体系一览表
- GB/T 5287-2002特大垫圈C级
- GB/T 19355.1-2016锌覆盖层钢铁结构防腐蚀的指南和建议第1部分:设计与防腐蚀的基本原则
- 彩妆专业知识教案课件
- 毛概-第二章-新民主主义革命的理论的课件
- 2022高考天津卷语文试卷及答案(解析版)
- 中医学病因病机共53张课件
- 第二单元 单元教学设计-统编版高中语文必修上册
- 企业诚信管理体系程序文件
- 山东大学工程流体力学(杜广生)课件第3章 流体动力学基础
评论
0/150
提交评论