收藏 分享(赏)

SAS学习系列08. 日期时间数据及数据格式.docx

上传人:ysd1539 文档编号:7099944 上传时间:2019-05-05 格式:DOCX 页数:10 大小:99.90KB
下载 相关 举报
SAS学习系列08. 日期时间数据及数据格式.docx_第1页
第1页 / 共10页
SAS学习系列08. 日期时间数据及数据格式.docx_第2页
第2页 / 共10页
SAS学习系列08. 日期时间数据及数据格式.docx_第3页
第3页 / 共10页
SAS学习系列08. 日期时间数据及数据格式.docx_第4页
第4页 / 共10页
SAS学习系列08. 日期时间数据及数据格式.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、08. 日期时间数据及数据格式(一)SAS 日期和时间数据SAS 将所有的日期转化成一个以 1960 年 1 月 1 日为起点的数值(日期数值) 。比如:January 1, 1960 0January 1, 1959 -365January 1, 1961 366January 1, 2020 21915SAS 处理日期数据包括:读取日期格式的数据,使用日期函数处理日期,按指定格式输出日期。一、 读取日期格式的数据1. 即按格式读入数据(formatted input) ,见系列 03。比如,input BirthDate MMDDYY10.;2. 设定默认的百年07/04/76 这样的数据

2、可能是 1976,也可能是 2076、1776。因此需要 YEARCUTOFF = 来指定一个一百年的第一年,默认的是 1920 年。例如,下面的语句就是告诉 SAS 将一个两位年份的日期解释为1960 年到 2049 年之间:OPTIONS YEARCUTOFF = 1950;3. SAS 日期的存取日期一旦被以 SAS 以日期格式读取之后,就将此数据像其他数值数据一样用在表达式中(日期数值) 。例如,像为图书馆的书设定 21 天的还书日期,只需要在借书日期上加上 21:DueDate = CheckDate + 21;通过引号和字母 D,可以将一个日期当作常数来使用,下面的代码创建了一个

3、EarthDay05 的日期变量,其值等于 April 22, 2005EarthDay05=22APR2005D;二、 使用日期函数处理日期SAS 提供的日期函数使得处理日期的操作大大简便。例如,today( ) 返回今天的日期;计算一本书应归还的剩余期限,就可以用:DaysOverDue = DateDue - today();用出生日期 Birthdate 计算年龄,可以用:CurrentAge = INT (YRDIF (BirthDate, TODAY(), AGE) );三、 按按指定格式输出日期按指定格式输出日期时,还需要将日期数值转换成日期。例如,下面的 FORMAT 语句告诉

4、 SAS 用 WORDATE18.格式打印日期变量 BirthDate。format BirthDate WORDATE18.;例 1 图书馆有借书卡数据,Dates.dat,包含持卡人姓名、出生日期、卡办理日期,到期日:读取数据,计算剩余期限(DaysOverDue) ;计算持卡人年龄(CurrentAge) ;接着用 IF 语句来判断一个卡是否为新卡,在 2012年 1 月 1 日之后办理的,为新卡。代码:data librarycards;infile c:MyRawDataLibrary.dat TRUNCOVER;input Name $11. + 1 BirthDate MMDDY

5、Y10. +1 IssueDate ANYDTDTE10. DueDate DATE11.;DaysOverDue = DueDate - TODAY();CurrentAge = INT(YRDIF(BirthDate, TODAY(), AGE);if IssueDate 01JAN2012D then NewCard = yes;run;proc print data = librarycards;format Issuedate MMDDYY8. DueDate WEEKDATE17.;title SAS Dates without and with Formats;run;运行结果:

6、程序说明:(1) BirthDate 变量没有指定输出格式,默认输出日期数值;(2) “ANYDTDTE10.” 以各种格式(非单一格式)读入日期;(3) 歧义日期值,例如 01-02-03,可以用 DATESTYLE = MDY 来设置(默认是 MDY) 。四、 时间数据1. SAS 的时间数值(time) ,表示从当天零点开始到当前时间的秒数,大小介于 0 和 86400 之间。hms(h,m,s) 由小时 h、分钟 m、秒 s 生成 SAS 时间值; t1 = 8:45T;时间常数值赋值;hour(time);返回时间数值的小时数;minute, second 类似;2. SAS 还有日

7、期时间数值(datetime) ,表示从 1960 年 1 月 1日零点到当前时刻的秒数。datetime 对应的几种格式:30May2000:10:03:17.2 DATETIME20. 30May00 10:03:17.2 DATETIME18. 30May2000/10:03 DATETIME15.conn = 01Feb2011:8:45DT;日期时间常数值赋值;dhms(d,h,m,s)由 SAS 日期值 d、小时 h、分钟 m、秒 s 生成SAS 日期时间值;datepart(dt) 返回 SAS 日期时间值 dt 的日期部分;intnx(interval,from,n)返回从 f

8、rom 开始经过 n 个 interval 间隔后的 SAS 日期,其中 interval 可以取YEAR、QTR、MONTH 、WEEK、DAY等;例如,intnx(MONTH, 16Dec1997d, 3);结果为 1998 年 3 月 1 日。注意:它总是返回一个周期的开始值。 intck(interval,from,to)返回从日期 from 到日期 to 中间经过的 interval 间隔的个数,其中 interval 取MONTH等。例如,intck(YEAR, 31Dec1996d, 1Jan1998d);返回两个日期的年间隔数,结果得 2,尽管这两个日期之间实际只隔 1 年。(

9、二)SAS 日期时间格式、函数及示例日期时间格式:格式 说明 默认宽度ANYDTDTEw 以各种格式读入(非单一格式) 9DATEw. ddmmmyy 或 ddmmmyyyy 7DDMMYYw. ddmmyy 或 ddmmyyyy 6MMDDYYw. mmddyy 或 mmddyyyy 6例:01/01/1961 (10.)JULIANw Julian 日期,yyddd or yyyyddd 5EURDFDDw.dd.mm.yy例:01.01.61 (8. 01.01.1961(10. )8WEEKDATEw.day-of-week, month-name dd, yy or yyyy例:Su

10、nday( 9.)Sunday, January 1, 1961(29.)29WORDDATEw.month-name dd, yyyy例:Jan 1, 1961(12.)January 1, 1961(18.)18TIMEw.d hh:mm:ss (8.)或 hh:mm:ss.ss(11.2 ) 8DATETIMEw.dddmmmyy:hh:mm:ss例:01JAN60:03:23(13.) 01JAN60:03:23:02.0(18.1)16日期时间函数:datejul(day) 将日期数值 day 转化为 Julian 日期值today() 返回今天的日期数值mdy(mm,dd,yy)

11、将月 mm、日 dd、年 yy 转化为日期数值day(date) 返回日期数值的日month(date) 返回日期数值的月(1-12)year(date) 返回日期数值的年qtr(date) 返回日期数值的季(1-4)weekday(date) 返回日期数值是周几( 1=星期日)yrdif(date1,date2, AGE)计算两个日期的“年龄差”例:a=mdy(4,13,2000); b=mdy(8,13,2012);yrdif(a,b,AGE); 返回 12.3342注:Julian 日期:5 位或 7 位,前 2 或 4 位是年,后 3 位为该年的第多少天,例如 1960 年 2 月 1

12、 日是 60032 或 1960032.(三)字符和数值格式1. 字符格式:格式 说明 默认宽度$UPCASEw. 转化为大写字母 8$w. 同$CHARw. 标准格式字符(不忽略开头空格) 12. 数值格式:格式 说明 默认宽度w.d 控制位宽,共占 w 位,其中 d 位小数 无BESTw. SAS 自动选择最佳数值格式(默认) 12COMMAw.d逗号数值格式例:1,200,001(9.) 1,200,001.00(12.2)6Ew.科学计数法例:1.2E+6(E7.)12PERCENTw.d百分数例:5.00%( PERCENT9.2)6DOLLARw.d美元金额: $开头+逗号数值格式

13、例:$1,200,001.00(DOLLAR13.2 )6EUROXw.d欧元金额:例:1.200.001,00 (EUROX13.2)6(四) 自定义格式数据集中为了处理方便有时候用数字代表实际的变量值,比如1 代表男性,2 代表女性。这种代码在输出的时候不好解读,可以用proc format 自定义格式,然后打印出想要的值。基本形式为:proc format;value 格式名 变量值 1 = 输出形式 1变量值 2 = 输出形式 2变量值 n = 输出形式 n;注:(1)若变量值是字符值,格式名前要加上$;(2)格式名长度不能超过 32 个字节(包括$) ,不能以数字结尾,除了下划线不能

14、包含其他任何特殊符号。且名字不能与已有的格式名冲突;(3)输出形式必须放在单引号里,中间要想输出单引号,需要用两个单引号。例如,employee s jobtitle employees jobtitle示例:A = Asia1, 3, 5, 7, 9 = Odd500000 - HIGH = Not Affordable13 - 20 = Teenager0 - HIGH = Positive Non ZeroOTHER = Bad Data例 2 关于汽车公司客户的调查信息数据(C:MyRawDataCars0.dat) 。包括客户年龄、性别(1 为男性,2为女性) 、每年收入、偏爱的汽车

15、颜色:读取数据,并使用 proc format 自定义格式过程,为颜色、性别和汽车创建输出格式。代码:data carsurvey;infile c:MyRawDataCars0.dat;input Age Sex Income Color $;proc format;value gender 1 = Male2 = Female;value agegroup 13 - 20 = Teen20 - 65 = Adult65 - HIGH = Senior;value $col W = Moon WhiteB = Sky BlueY = Sunburst YellowG = Rain Cloud

16、 Gray;* Print data using user-defined and standard (DOLLAR8.) formats;proc print data = carsurvey;format Sex gender. Age agegroup. Color $col. Income DOLLAR8.;title Survey Results Printed with User-Defined Formats;run;运行结果:程序说明:(1)定义格式时,格式名后面没有句点,而在设定输出格式时,格式名后面带句点(表示位宽无小数位) ;(2)该代码是定义临时格式(默认存到临时逻辑库 work) ,也可以另指定路径定义永久格式。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报