SAS初学者笔记---002--表达式与函数简介--时间日期变量

本篇介绍sas中表达式、常量、变量的概念以及常用的函数。

以下是本文参考的部分网页、文件、博客等资料。
sas官方关于算符的文件
SAS官方关于日期变量的文件

关于常用函数的博客文章较多,本文不再赘述,此处链接几个比较综合的常用函数链接
知乎-路上的你
简书–飘乐云
博客园-IUpoint

SAS表达式是由一系列算符和运算对象形成的一个指令集,它被执行后产生一个目标值。 运算对象是SAS变量和SAS常数;算符是特殊的运算符、函数和括号。

日期时间变量在时间序列分析中有较为重要的地位,掌握时间日期变量的转换是格外重要的!!!
话不多说,开始吧!

时间数据简要介绍

众所周知,时间序列数据在SAS中的存储方式是将时间转换成距离1960年1月1日的天数, 例如:
1960年1月3日,在系统中存为2。
2004年1月25日,在系统中存为16095。
1959年12月30日,在系统中存为-2。
如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200623173936566.png
SAS官方也给了关于时间序列的解释图,在这里插入图片描述
我们要明白,时间序列之间是可以相加减的,其本质就是其在内存中存储的天数相加减,如图:

data test;   
   date1=22095;
   format Date1 date9.;
   date2=22122;
   format Date2 date9.;
   gap = date1-date2;
   date3 = date1+10;
run;
proc print data=test;
run;

在这里插入图片描述
上图中值得注意的是,使用时间数据减去某一常数时,返回结果会以差值天数展示

形似时间数据转化为时间数据

在录入数据时,我们常常遇到的数据类型往往是这样
在这里插入图片描述
当整列的数据出现在数据中时,有效的将其转化为时间数据就需要一些办法。
下面以此段数据为例
在这里插入图片描述
此段数据形式为,数据录入时代码如下。

data schedule;
   input projdate mmddyy10.;
format projdate mmddyy10.;
datalines;
01/15/25
03/15/2025
01/30/96
02/05/12
06/15/2012
;
proc print data=schedule;
run;

在这里插入图片描述

值得注意的是,代码中出现了两次mmddyy10,分别删去两次mmddyy10后运行
去除第一个:
在这里插入图片描述
去除第二个:
在这里插入图片描述
可见两次代码的作用如下:
第一次:提示input语句此列数据作为相应格式的时间数据保存在数据集中,即输出结果为与零时间对应的差值
第二次:将差值转化为相对应格式的数据并保存在数据集中

利用函数将年月日转化为时间数据

在录入数据时,有时候并不能将年月日数据合并到一个变量中,往往存在不同的变量分别保存年、月、日等数据,此时便需要mdy函数,mdy函数官方文档
代码如下

data aaa;
date1 = mdy(5,18,1998);
format date1 mmddyy10.;
run ;
proc print data = aaa;
run;

在这里插入图片描述

非时间数据转化为时间数据
差值天数转化为时间数据

经过上面的示例可以看到可以将距离零时间的天数转化成日期变量

data test;
input date;
format date date9.; 
cards;
22
;
proc print data=test;
run;

在这里插入图片描述
其中format语句是至关重要的一部分,其后可以搭配诸多选项,可查阅SAS官方关于日期变量的文件
在这里插入图片描述

非差值天数转化为时间数据

上述内容展示了利用与零时间的差值,将数据转化为时间数据。同样,在已知一个时间的前提下,得到目标时间点与已知时间点的天数也能得到目标时间的时间数据格式

data test;   
   date1=22095;
   format Date1 date9.;
   gap = 10;
   date2 = date1+gap;
   format date2 date9.;
run;
proc print data=test;
run;

在这里插入图片描述

关于非时间数据转化为时间数据的小结

非时间数据转化为时间数据的本质是:在给定某一整数的前提下,将此整数视为与零时间的差值,从而根据日历计算目标时间。
转化此类数据最关键的方法是使用format语句对给定整数进行转化
即上述代码中的

   format Date1 date9.;

同样的,此代码最后一段具有多种可替换的格式,具体请查看可查阅SAS官方关于日期变量的文件

结语

sas存储时间数据的逻辑比较单一,仅为将数据存储为与零时间的差值。其他所有关于时间数据的转换皆为对此差值的操作。
这一篇笔记就这样了,感谢你能看到这里,我会继续更新的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值