版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第13章 变量输入输出格式,清华大学经管学院 朱世武,本章内容包括:,输入格式; 输出格式; SAS日期时间存贮方式; 日期时间输入格式; 日期时间输出格式; 缺失值处理。,输入格式,输入格式是SAS系统用来读入数据值的一个指令。 输入格式形式 INFORMAT . 选项说明: 通用规则: 所有输入格式必须包含一个点(.)作为名字的一部分; 对于省略W和D值的输入格式,使用系统缺省值。,输入格式使用方法,INPUT语句; INPUT函数; DATA步中用INFORMAT或ATTRIB语句; PROC步中用INFORMAT或ATTRIB语句。,INPUT语句,例13.1 列格式输入。 input
2、 6 date ddmmyy10. +1 stocd $ 8. oppr 8.2; 例中,从第6列开始以DDMMYY10.格式读入变量DATE, 第7列开始以长度为8的字符格式读入变量STOCD,然后以数值格式8.2读入变量OPPR。,INPUT函数,例13.2 字符转换数值。 data; x=98.6; y=input(x, 4.); put x= y=; run; 例中,INPUT函数和w.d输入格式将X的字符值转换为一个数值Y. INPUT函数对于数据的转换是很有用的,当然,有更简单的方法将字符值转换为数值。 data; x=98.6; y=x-0; put x= y=; run;,例1
3、3.3 数值转换为字符时会产生不正确结果。 data; x=2557898; y=input(x,$8.); put y; run; 例中,产生的结果为255, 不正确。,例13.4 PUT函数将数值转换为字符。 data; x=2557898; y=put(x, $8.); put y; run; 例中,用PUT函数得到正确结果,即字符型2557898. data; x=2557898; y=put(x, $3.); put y; run; 例中,Y的结果为3E6.,在DATA步中用INFORMAT语句或ATTRIB语句,例13.5 DATA步中用INFORMAT语句。 data a; in
4、put x; informat x comma12.4; cards; 12,345.1234 22,345.1234 ; run; 例中,最好就是只用INFORMAT语句,不要用ATTRIB,这样可以少记些东西。,永久性与临时性联系,DATA步规定的输入格式是永久联系的; PROC步规定的输入格式是临时联系的。,输入格式类型,数值输入格式; 字符输入格式; 日期时间输入格式; 竖式二进制数输入格式; 使用FORMAT过程自定义的输入格式。,w.d输入格式,读入标准数值数据。 例13.6 INPUT语句对变量使用列指针控制和w.d的输入格式。 INPUT X 8.2; INPUT X 1-10
5、 .2; W.D输入格式把一个点(.)作为缺失值。 用W.D输入格式时,数值域尾部的空白不表示0,用BZ.输入格式可以把尾部空白读为0.,数值变量输入格式,COMMAw.d 输入格式,COMMAw.d输入格式读入包含字符的数值。 数值数据内可能包含的字符有: 逗号; 空格; $; %; 破折号; 圆括号等。 例13.8 读入带千分号的数据。 data a; input x comma12.2; cards; 12,522.2315 ; run;,例13.10 数值变量输入格式应用举例。 data ; informat x 8.2; x=12345.1234; put x=; run; data
6、 a; x=12345.1234; informat x 12.4; format x 8.2; put x=; run; data a; input x; informat x comma12.4; cards; 12,345.1234 22,345.1234 ; run;,结果显示x=12345.1234. 结果显示x=12345.12.,$w.输入格式,读入标准字符数据。 在读入字符值之前,$w.输入格式清除字符值开头的空格。 $w.输入格式把一个点(.)转换为空格,因为它把一个点看作缺失值。 例13.11 读入数据时,清除数据开头空格并将(.)转换为缺失值。 data; input n
7、ame $5.; cards; xyz . uvw ; options nocenter; proc print noobs; run;,输出结果: xyz uvw,字符变量输入格式,$CHARw输入格式,读含有空格的字符数据。$CHARw.输入格式除了不清除字符值开头的空作格外,它等同于标准的$w.输入格式。 例13.12 保留开头和结尾的空格。 data; input name $char10.; cards; xyz . uvw ; options nocenter; proc print noobs; run; INPUT语句采取自由格式输入时,INFORMAT或ATTRIB语句中不能
8、使用$CHAR.输入格式,因为SAS把空格看作数据行中数值间的分隔符。,输出结果: xyz . uvw,例13.13 不能放放在一起使用的语句。 informat x $char12.; input x y z; 例13.14直接赋值为字符型变量。 data a; x1=st92; x2=st92; informat x $8. ; x3=12,345.1234; run;,输出格式,输出格式是SAS系统用来输出数据值的一个指令。 输出格式形式 FORMAT . 选项说明:,通用规则: 所有输出格式必须包含一个点(.)作为名字的一部分; 省略W和D的值时,使用系统的缺省值; 无论怎样规定输出格
9、式中的小数位,输出格式都不会影响存贮的数据值; 规定的输出格式宽度太窄小时,对字符格式截去右边的字符,对数值格式转换为BESTw.的格式; 使用一个不协调的输出格式时,SAS系统首先试着使用其它类型的类似格式。如果行不通,将输出一个错误信息在SAS日志。,输出格式使用方法,PUT语句; PUT函数; DATA步中用FORMAT或ATTRIB语句; PROC步中用FORMAT或ATTRIB语句。,PUT语句,例13.15 PUT语句中使用输出格式。 data; x=1145.32; put x dollar10.2; run; 结果为$1,145.32。输出格式带千分号和美元号。,PUT函数,P
10、UT函数对于将数值转换为字符,或者改变变量的字符输出格式是很有用的。 例13.16 PUT函数中使用输入格式。 data; cc=16; cchex=put(cc,hex3.); put cc hex3.; run; 结果为010. 例中,转换数值变量cc的值为三个字符的十六进制表达式。 data; cc=16; cc=put(cc,3.); run; 例中,将数值CC转换为字符值。,DATA步中用FORMAT或ATTRIB语句,例13.17 DATA步中用FORMAT或ATTRIB语句。 format sales1-sales12 comma10.2; 例中,FORMAT语句对变量sales
11、1至sales12规定输出格式COMMAw.d. attrib sales1-sales12 format=comma10.2;例中,ATTRIB语句对变量sales1至sales12规定输出格式COMMAw.d.,输出格式类型,数值输出格式; 字符输出格式; 日期时间输出格式; 使用FORMAT过程创建的自定义输出格式。,w.d输出格式,输出标准数值数据。对超出输出格式宽度的数值进行四舍五入。数值过大时,使用BESTw.输出。 例13.18 w.d输出格式应用。 data a; x=23.45; put x 6.3; run; 结果是23.450。 例13.19 使用列输出法等价于使用指针控
12、制和w.d的格式。 put x 1-8 .2; put 1 x 8.2; 例中,两个语句等价。,数值变量输出格式,BESTw.格式,没有对变量规定输出格式时,使用BEST.的格式。SAS在规定的宽度列数中选择能够给出该值最多信息的表示法作为输出格式。SAS仍存贮原来的完整数值。,例13.20 用不同的BESTw.形式输出时,显示结果不一样,但在SAS存贮的都是原来的完整数值。 data; x=12570000; put 10 x best6.; run; 输出值为1.26E6。正确地输出这个值需要8列,使用E表示法把这个值压缩为6列. data; x=12570000; put 10 x be
13、st3.; run; 输出值为1E6. data; x=12570000; put 10 x best2.; run; 输出值为*.,Ew.输出格式,例13.22 用科学记数法表示输出数值。 data; x=1257; put 10 x e10.; run; 输出值为1.257E+03,共占9列。,输入输出控制流程,输入-存储-输出控制流程,$w.输出格式,$w.是最常用的字符数据输出格,w值给出输出字符值的列数。 例13.24 $w.和列输出格式产生同样效果。 data ; name=ABC; put 10 name $3.; put name $10-12; run; 例中,都输出值为AB
14、C.,字符变量输出格式,日期时间存贮方式,SAS日期值存贮方式 SAS系统存贮日期值为1960年1月1日到这个日期之间的天数。 日期存贮方式举例,例13.25 表中天数的计算程序。 data; date=mdy(1,1,1960); put date 8.; date=mdy(3,3,1962); put date 8.; date=mdy(8,4,1985); put date 8.; date=mdy(10,1,2002); put date 8.; date=mdy(7,4,1776); put date 8.; run;,SAS日期时间值存贮方式,SAS存贮时间值从0时开始以秒记数。
15、日期时间值存贮方式举例,例13.26 表中秒数的计算程序。 data; hms=hms (21,50,51); put hms=; x=21*60*60+50*60+51; put x=; date=mdy(10,1,2002); put date=; dhms=dhms (date,21,50,51); put dhms=; y=date*24*3600+x; put y=; run;,日期时间输入格式,应用举例,例13 27 使用SAS日期时间的输入格式。 data a; input date mmddyy10.; cards; 10-01-2002 10/01/2002 ; run;,日
16、期时间输出格式,假定日期时间值为2003年3月27日12点5分5.49秒, 星期四,为2003年的第86天,第1季度,所在周的第5天。,例13.28 使用SAS日期时间的输出格式。 data a; input date mmddyy10.; format date yymmdd10.; put date=; cards; 10-01-2002 10/01/2002 ; run; data a; input date mmddyy10.; format date date9.; put date=; cards; 10-01-2002 10/01/2002 ; run;,data ; x=put
17、(today(), date7.);put x; y=put(today(),8.0); put y; z=today(); put z; u=put(15260, yymmdd10.);put u; v=put(15260, date9.);put v; run; 显示结果: 19SEP02 15602 15602 2001-10-12 12OCT2001,data; x=13807; format x yymmdd10.; put x=; run; 显示结果: x=1997-10-20 data; date=11oct2001d; put date=; format date yymmdd
18、10.; run; 显示结果: date=2001-10-11,缺失值处理,读入含缺失值的数据 可以表示缺失值的字符有: 空格; 点; MISSING语句规定的字符。 例13.29 空格表示缺失值的数据适合列方式读入。 data a; input name $1-5 test1 7-8 test2 10-11; cards; ann 9296 susan 84 bill 81 ; run; 例中,SUSAN第一次测验缺席,BIL第二次测验缺席,空格表示缺失值。,例13.30 点表示缺失值的数据适合自由方式读入。 data b; input name $ test1 test2 ; cards;
19、 ann 9296 susan . 84 bill 81 . ; run; 例13.31 读入由MISSING语句规定缺失值的数据。 data c; Missing A; input name $ test1 test2 ; cards; ann 9296 susan A 84 bill 81 A ; run;,系统产生的缺失值,SAS系统产生缺失值的情况有三种: 算术运算; 非法运算符; 非法字符转换为数值。,第14章 宏编程技术,清华大学经管学院 朱世武 Z Resdat样本数据: SAS论坛: ,本章内容包括:,概述; 宏变量; 宏; 宏参数; 宏表达式; 宏引用; 宏工具中的输入输出;
20、 数据步接口程序; 宏程序语句和宏函数。,概述,宏工具是一种可以用来扩展SAS功能,减少普通工作文本输入量的SAS工具。宏工具可以给一段文本或SAS程序命名,并通过引用这个名称来使用这段程序或文本。,宏工具的功能非常强大,使用宏工具来完成以下任务。 使用宏变量实现文本替代; 使用宏产生程序语句; 使用宏循环及条件判断语句完成程序交互。,宏变量,定义宏变量 用宏程序语句%LET来定义宏变量。 %let DSN=ResDat.class; 例中,DSN是宏变量名,ResDat.class为宏变量DSN的值。,引用宏变量,在宏变量前加,例14.2 宏处理器只能在双引号内进行替代。 %let a=ja
21、nuary; data; put This is the time series plot for 例中,在引号内引用宏变量的值时必须用双引号。因为宏处理器只能在双引号内进行替代。,606 %let a=january; 607 data; 608 put This is the time series plot for This is the time series plot for january NOTE: 数据集 WORK.DATA1 有 1 个观测和 0 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.01 秒,例14.3
22、多次引用宏变量。 %let a=ResDat.class; data male; set ,例14.4 改变宏变量的值。 %let m=2000; %let n=1; data a; set ResDat.stk000002; where year(date)= 例中,改变宏变量的值,如:%LET N=2,3,4,5,.,12可以分别得到12个月的时序图。不过,更好的方法是用宏循环来实现这里的要求。,例14.5 宏变量的值为一段完整的SAS程序段。 %let plot=%str( proc gplot data=a; plot clpr*date=1; symbol1 v=star i=joi
23、n r=1 c=red; run; ); 例中,必须使用%STR函数围住宏变量的值,在以后的程序中可以用)。,例14.6 宏变量的嵌套引用。 %let m=2000; %let n=1; %let xvar=date; %let yvar=clpr; %let plot=%str( proc gplot data=a; title2 ,如何隔开宏变量引用和文本,在混合使用宏变量引用和文本的时候,会遇到宏变量后面紧跟着文本的情况。 如定义宏变量name后,当使用 %PUT ,显示宏变量值,显示宏变量的最简单方法是使用%put语句,它将文本输出到SAS的日志窗口。 语句格式: %PUT ; 例14
24、.8 显示宏变量的值。 data _null_; %let a=first; %let b=macro variable; %put LOG窗口显示: first ! macro variable !,间接引用宏变量,对一系列的宏变量引用,如data1,data2, data3, 这一系列中部分文本是固定的名称,而另一部分是变化的数字。这时就可以采取间接引用方式。 例14.9 间接引用宏变量。 %let data1=x; %let data2=y; %let data3=z; %macro test; %do i=1 %to 3 ; %put %test,宏变量范围,宏变量以使用范围分为全局宏
25、变量和局部宏变量 全局变量可以在SAS对话运行期间使用并且可以在程序的任何地方引用 局部变量则只能在创建该局部变量的宏中使用,在这个宏之外,这个局部变量就没有任何意义。,宏,宏是被编辑过的可以从SAS程序中调用的程序。同宏变量一样,一般可以使用宏来产生文本。 定义宏的格式: %Macro MAC; 文本; %mend MAC;,例14.10 定义宏plot。 %macro plot; proc gplot data=ResDat.stk000002; title2 收盘价时序图; plot clpr*date=1; symbol1 v=star i=join r=1 c=red; %mend
26、plot;,调用一个宏,用一个百分号(%)加宏名字就可以调用该宏。 例14.11 定义并调用宏plot。 %macro plot; proc gplot data=ResDat.stk000002; title2 收盘价时序图; plot clpr*date=1; symbol1 v=star i=join r=1 c=red; %mend plot; /*以上定义宏plot*/ %plot; /*调用宏*/ run;,改变宏内宏变量的值,例14.12 改变宏内宏变量的值,分以下几步完成。 定义宏plot: %macro plot; proc gplot data=ResDat.,定义宏变量:
27、 %let dat=stk000002; %let pr=收盘价; %let price=clpr; 调用宏plot: %plot; 改变宏变量的值: %let dat=stk000002; %let pr=最高价; %let price=hipr; 再次调用宏plot: %plot; run; 以上各段程序可以连在一起运行。,宏参数,宏变量和宏结合在一起是一种强有力的编程方法。但应用起来并不十分方便。最常用的是在宏中使用宏参数。 宏参数是一种特殊的宏变量,是定义在宏%MACRO语句内的宏变量。,例14.13 创建宏参数。 %macro plot(dat,pr,price); proc gpl
28、ot data=ResDat. 例中,在%MACRO语句括号内定义的宏变量DAT, PR和PRICE称为宏参数。,例14.14 通过给宏参数赋值来调用宏。 %plot(stk000002, 收盘价,clpr); 例中,运行时,宏处理器把第一个值(stk000002)赋给第一个宏参数DAT,第二个值(收盘价)赋给第二个宏变量PR,以此类推。,使用宏参数的优点: 可以少写几个%let语句; 保证该宏参数变量在宏之外的程序部分不被引用; 调用宏时并不需要知道这些宏参数的名字,只要知道相应的取值。,宏参数赋值,例14.16 创建宏参数时直接赋值。 %macro plot(dat=stk000002,
29、pr=收盘价,price=clpr); proc gplot data=ResDat.,例14.17 运行宏时赋值。 %macro plot(dat,pr,price); proc gplot data=ResDat.,宏调用宏,产生数据集宏:. %macro create; data temp; set ResDat.,宏调用宏: %macro analyze(dat, year, pr,price,year1); %create; /*产生数据集TEMP*/ %plot; /*作图*/ %mend analyze; 运行宏: %analyze(stk000002, 2000, 收盘价,clpr,2000); run;,条件表达式,例14.19 用条件表达式%if-%then定义宏。 %macro analyze(getdata, dat, year, pr,price,year1); %if ,生成重复文本,例14.22 定义生成重复文本宏。 %macro names(name, number); %do n=1 %to ,620 %end; 621 %mend names; 622 data %names(dsn, 5); 623 run; NOTE: 数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子电气产品能效检验员安全综合测试考核试卷含答案
- 聚偏氯乙烯装置操作工岗前实操效果考核试卷含答案
- 醋酸乙烯装置操作工岗前内部控制考核试卷含答案
- 水电站水工建构筑物维护检修工安全实操模拟考核试卷含答案
- 电子电路逻辑布线工QC管理强化考核试卷含答案
- 自体干细胞移植的并发症及护理措施
- 大肠息肉的术后护理
- 河南省2025-2026学年高二历史上学期期末考试16-4选择性必修三册
- 门诊护理伦理与法律问题
- 针灸操作技术及护理配合
- GB/T 47383-2026航空航天O形圈沟槽尺寸
- 2026年广西继续教育公需科目试题及答案
- 呼吸衰竭的早期识别与处理
- 2026中国华电校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 数学活动切割后组拼正方形
- 2026年事业单位考试公文改错专项训练测试
- 2026年芯片设计DFT工程师高频面试题包含详细解答
- 2026年上海市静安区社区工作者招聘考试参考题库及答案解析
- 数字化时代下TC保险公司内部审计信息化建设路径探析
- 2026年心血管内科医疗质量控制方案
- 中粮粮食采购管理制度
评论
0/150
提交评论