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

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

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

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

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

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

时间数据简要介绍

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

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

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

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

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

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语句此列数据做为相应格式的时间数据保存在数据集中,即输出结果为与零时间对应的差值
第二次:将差值转化为相对应格式的数据并保存在数据集中blog

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

在录入数据时,有时候并不能将年月日数据合并到一个变量中,每每存在不一样的变量分别保存年、月、日等数据,此时便须要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存储时间数据的逻辑比较单一,仅为将数据存储为与零时间的差值。其余全部关于时间数据的转换皆为对此差值的操做。 这一篇笔记就这样了,感谢你能看到这里,我会继续更新的!