使用 SAS 日期和时间

来源:互联网 发布:oracle数据库下载教程 编辑:程序博客网 时间:2024/06/05 19:31

SAS 将日期和时间存储为一个唯一数字,这样就可以象使用其他数值变量一样在程序中使用它们:

  • SAS 日期值代表介于 1960 年 1 月 1 日和指定日期之间的天数。SAS 可以对公元 1582 年到公元 19,900 之间的日期进行计算。1960 年 1 月 1 日之前的日期为负数;在此之后的日期为正数。
  • SAS 时间值代表自当日午夜 12 时算起的秒数,SAS 时间值介于 0 和 86400 之间。
  • SAS 日期时间值是代表 1960 年 1 月 1 日和指定日期内的小时/分钟/秒之间的秒数的值。

要处理 SAS 日期、时间和日期时间值,可以使用以下工具:

  • 输入格式,用于读取值,如时钟时间或日历日期(可能长度不一),然后将该数据转换为 SAS 日期、时间或日期时间值。
  • 输出格式,用于 SAS 识别的值,如时间或日期值,表示为长度不一的日历日期或时钟时间。
  • 函数,用于对 SAS 日期、时间和日期时间值执行操作。

options nodate nonumber;

data test; 
   Time1=86399;
   format Time1 datetime.;
   Date1=86399;
   format Date1 date.;
   Time2=86399;
   format Time2 timeampm.;
   Date1Month=month(Date1);

run;

前三个赋值语句(例如,Time1=86399;)将 Time1、Date1 和 Time2 的值设为 86399。三个 FORMAT 语句将 SAS 输出格式 DATETIME.、DATE. 和 TIMEAMPM. 与上述变量关联,以便相应地将该值显示为日期时间值、日期值和时间值。第四个赋值语句 (Date1Month=month(Date1);) 使用 MONTH 函数创建了变量 Date1Month,用于从 Date1 中提取月。利用时间输出格式可以计算一天内的秒数,其值将介于 0 和 86400 之间。利用日期时间输出格式可以计算自 1960 年 1 月 1 日起的秒数,这样,对于 02JAN1960:00:00:01(整数 86401)之后的日期时间,日期时间值始终大于时间值。请记住要选择可以将 SAS 日期、时间或日期时间值转换为所需日期、时间或日期时间输出格式的 SAS 语言元素。如有疑问,请查看数据集的内容,找出与处理的值类型相关的线索。

 

options nodate nonumber;
data meeting; 
   input region $ mtg : mmddyy10.;
   sendmail=mtg-45;
   datalines;
N  11-24-99
S  12-28-99
E  12-03-99
W  10-04-99
;

run;

INPUT 语句使用 MMDDYY10. 输入格式读取原始数据中的日期值(跟在 DATALINES 语句之后),并创建了变量 mtg。赋值语句 (sendmail=mtg-45;) 通过从会议召开日期减去 45 天来计算邮寄日期。

请注意原始数据包含的是两位年份值。SAS 可以读取两位或四位年份值。使用 YEARCUTOFF= 选项可以在 100 年的时间跨度内为任意两位年份值指定所属的世纪。例如,YEARCUTOFF=1950 表示 50 到 99 之间的两位年份值对应于 1950 到 1999 年,而 00 到 49 之间的两位年份值对应于 2000 到 2049 年。

“SAS 系统”版本 9 中 YEARCUTOFF= 选项的默认值为 1920,不过可以在 DATA 步中调整 YEARCUTOFF= 的值,使其适应当前使用的数据值范围。要正确处理代表 2000 和 2099 年之间日期的两位年份值,应该在 1901 和 2000 之间为 YEARCUTOFF= 指定一个适当的值。

!!!

读取日期时,比较好的编程做法是始终使用 DATE9. 或 MMDDYY10. 输入格式以确保正确读取数据。如果使用 DATE7. 或 MMDDYY8. 输入格式,则 SAS 只读取年份的前两位数字。如果数据包含的是四位年份,则 SAS 读取的是世纪而不是年份。

proc print data=meeting noobs;
   format mtg sendmail date9.;

   title 'When to Send Announcements';
run;

PROC PRINT 步中的 FORMAT 语句,通过 DATE9. 输出格式显示变量 mtg 和 sendmail 的值。



From:http://linji526.blog.163.com/blog/static/52112602201072174647948/




原创粉丝点击