EN
【技术】SAS计时,不一样的原点定义!
2023-03-05 22:15

图片2.png


       时间(Time),用物理语言来解释,它是物质的永恒运动、变化的持续性、顺序性的表现。古往今来,时间的计量方式也多种多样,公元纪年法、帝王纪年法、干支纪年法、民国纪年法等等,每种纪年方式都有各自定义的规则。同样地,在编程世界中也有这样的运行规则。

       SAS采取的是以1960年1月1号为日期的原点,1960年1月1号0点0分0秒为时间的原点,但并不是说在此之前的日期就无法表示。在原点之前的日期依然用与原点的间隔来表示,只是前面需要加一个负号。例如-2如果表示日期,则表示的是1960年1月1日的前两天,即1959年12月30日。


图片3.png


       1.日期变量的数据格式

       日期变量的格式是将日期存储的数字转化为完全或部分包含年、月、日的值,其中比较常用的是yymmdd.格式和date.格式,使用方法是格式名+长度。

例如yymmdd.格式:


图片4.png

图片5.png


       使用format语句对date变量赋予数据格式,让它的格式显示为yymmdd10.格式,查看数据集,我们得到的是2020-03-26,这正是与日期原点相差22000天的日期。

       yymmddw.为一类数据格式的统称,它们都以年为开头,后接月和日,不同长度的显示样式不同,下表是不同长度的yymmdd格式的显示样式。


图片6.png


       有时,我们不希望仅以数字表达日期,而是希望用月份名称来表示,SAS也提供了相关的数据格式,这就是date.格式,例如:


图片7.png

图片8.png


       运行后查看结果,得到的是26MAR2020,可以看到date.格式按照日月年的顺序显示日期,但将月份以3位字母表示。这样做的好处是表示年与日的数字分离,中间以字母间隔,每部分内容表示的意义一目了然,方便查看。当然缺点在于直观上理解不便,例如相同年份的05月和06月,我们很容易看出谁在前面,但MAY和JUN则需要反应一下。

       date.格式的长度可以在5~11之间取值,它们的区别如表所示。


图片9.png


       2.时间变量的数据格式

       提到时间的时候,我们一般有两种所指,一种是日期与时间的结合,它在SAS中用该日期时间点与1960年1月1日0点0分0秒相距的秒数表示。而另一种时间是指一个单纯的时间,例如05:00,它所对应的数字是其与0点0分0秒相距的秒数。我们首先来看这种单纯的时间。

       时间最常用的格式为time.格式,它的显示清晰、明确,将时、分、秒,以:分割显示。例如:


图片10.png

图片11.png


       生成的数据集中,time变量的值为3:25:45,表示与0点0分0秒相距12345秒的时间点为凌晨3点25分45秒。


       3.IOS8601格式

       ISO8601日期时间格式是一种“日期+时间”的数据格式。

       符合ISO8601标准的日期和时间如下:


图片12.png


       它是一个结合了日期与时间的函数,首先看日期,类似yymmdd10.格式,以4位年+2位月+2位日,中间以-分割的方式表达日期,时间则类似time8.格式,使用2位时+2位分+2位秒,中间以:分隔,日期与时间之间以字母T分隔。

       ISO8601格式在SAS中的格式如下:


图片13.png

图片1.png


4.与日期和时间变量相关的函数

日期和时间变量虽然在SAS中并不是一类特别的变量,但是SAS设计了专门的函数来处理它们。大体可以分为3类:截取类、组合类和间隔类

       1)截取类

       当我们获取了一个日期和时间变量后,有时候我们希望将其拆解为年月日时分秒,此时截取类函数就发挥了作用,具体如下所示的函数:

图片14.png


       2)组合类

       组合类函数与截取类函数功能相反,是将组成日期的部分直接组合成一个完整的日期变量,具体如下所示的函数:


图片15.png


       3)间隔类

       最后要介绍的是间隔类函数,最常用的为intck和intnx。

       intck函数的功能是给定两个日期,计算它们中间的间隔数量,代码为:

图片16.png

       例如我们有date1=2020-05-18,date2=2019-03-17,希望计算它们之间相差多少天,使用intck的方法为:

图片17.png

       intnx函数的功能是给定某个日期和间隔的数量,获得另一个日期值,代码为:

图片18.png

       例如我们已知今天的日期,希望得到7个礼拜之后的日期,可以使用以下语句:

图片19.png

       SAS提供了大量专门的函数和数据格式,熟悉它们可以让我们更好地进行数据分析工作。希望读者读完可以有所收获。


我们如何帮您呢?凯莱英临床(凯诺)专业团队为您尽快提供服务