sas 中如何实现类似excel中edate的功能
发布网友
发布时间:2022-10-20 19:13
我来回答
共1个回答
热心网友
时间:2024-03-22 05:53
INTNX 函数
按指定间隔递增日期、时间或日期时间值,并返回日期、时间或日期时间值
语法
INTNX(interval<multiple><.shift-index>, start-from, increment<,alignment>)
参数
interval
指定包含时间间隔的字符型常数、变量或表达式,例如 WEEK、SEMIYEAR、QTR 或 HOUR。
要求:interval 的类型(日期、日期时间或时间)必须与 start-from 和 increment 中的值类型匹配。
multiple
指定间隔的倍数。它将间隔设置为间隔类型的倍数。例如,YEAR2 由两年期间组成。
请参见“Incrementing Dates and Times by Using Multipliers and by Shifting Intervals”
shift-index
指定间隔的开始点。默认情况下,开始点为 1。大于 1 的值会将开始点移位到间隔中靠后的点。移位的单位取决于间隔。例如,YEAR.3 指定将每年期间移位到在每个日历年的三月一日开始,并且在下一年的二月结束。
*:位移索引不能大于整个间隔中的期间数。例如,YEAR2.24 的位移索引有效,但是 YEAR2.25 无效,因为两年期间内没有第 25 个月。
*:若默认位移期间与间隔类型相同,则您仅能使用位移索引位移多期间间隔。例如,因为 MONTH 类型间隔默认情况下按 MONTH 子期间进行移位,所以您不能使用位移索引对每月间隔进行移位。不过,您可以使用位移索引移动双月间隔,因为在每个 MONTH2 间隔中有两个 MONTH 间隔。例如,间隔名 MONTH2.2 指定从偶数月的第一天开始双月期间。
start-from
指定表示 SAS 日期、时间或日期时间值的 SAS 表达式,用以标识开始点。
increment
指定表示日期、时间或日期时间间隔数的负整数、正整数或零。increment 是将 start-from 值移动的间隔数。
alignment
控制间隔内 SAS 日期的位置。alignment 可以是以下值之一:
BEGINNING
指定将返回日期调整到间隔的开始点。别名:B
MIDDLE
指定将返回日期调整到间隔的中点。
别名:M
END
指定返回日期调整到间隔的结束点。
别名:E
SAMEDAY
指定将返回日期调整为与相应间隔增量相同的日历日期。
别名:S
别名:SAME
默认:BEGINNING
详细信息
基础 INTNX 函数按间隔(例如 DAY、WEEK、QTR 和 MINUTE)递增日期、时间或日期时间值。增量取决于开始日期、时间或日期时间值,以及您指定的时间间隔数。INTNX 函数返回您在 start-from 参数中指定的间隔的开始日期、时间或日期时间值。例如,要确定距离 2003 年 10 月 17 日所在周 6 周的那一周的开始日期,请使用以下示例:
intnx(‘week’, ‘17oct03’d, 6);
INTNX 返回值 23NOV2003。
通过使用乘数和移位间隔递增日期和时间 SAS 提供日期、时间和日期时间间隔来对不同的已用时间期间进行计数。通过使用乘数和位移索引,您可以创建间隔的倍数和移动其开始点以构造更复杂的间隔指定。
间隔名称的一般格式如下所示:
name<multiplier><.shift-index>
乘数和位移索引是可选参数,默认值为 1。例如,YEAR、YEAR1、YEAR.1 和 YEAR1.1 都可以指定始于 1 月的通常的日历年。若您为乘数和位移索引指定其他值,您可以创建始于该年内不同时期的多倍间隔。例如,间隔 WEEK6.11 指定始于第二个星期三的 6 周间隔。
了解时间间隔 在年或天内的间隔都以 SAS 日期或日期时间值 0 为基点调整。SAS 使用 1960 年 1 月 1 日午夜的任意参考时间都用作非移位间隔的原点,并相对于 1960 年 1 月 1 日定义移位后的间隔。
例如,MONTH13 定义间隔 1960 年 1 月 1 日、1961 年 2 月 1 日、1962 年 3 月 1 日等等。间隔 1958 年 12 月 1 日、1957 年 11 月 1 日、1956 年 10 月 1 日 等等都是在基本日期 1960 年 1 月 1 日之前的日期。
再举一例,间隔指定 WEEK6.13 定义始于第二个星期五的 6 周期间。相对于包含 1960 年 1 月 1 日的期间进行调整这一规则确定了开始计数的位置,以确定对应于 6 周间隔的第二个星期五的日期。
示例
以下示例展示如何使用 INTNX 函数。
SAS 语句结果
yr=intnx(‘year’,’05feb94’d,3);13515
put yr / yr date7.;01JAN97
x=intnx(‘month’,’05jan95’d,0);12784
put x / x date7.;01JAN95
next=intnx(‘semiyear’,’Oljan97’d,1);13696
put next / next date7.;01JUL97
past=intnx(‘month2’,’Olaug96’d,-1);13270
put past / past date7.;01MAY96
sm=intnx(‘semimonth2.2’,’Olapr97’d,4);13711
put sm / sm date7.;16JUL97
具体你可以用EG模块查询生成器 -添加新的计算列-高级表达式中就有这个时间函数追问我想直接在表格里面将格式改为日期,而不是put输出;此外,虽然月份能够向后推,但是具体的日期都变成了某月1号,如何让它保留之前日期的具体号数。谢谢您啦~
追答增加SAMEDAY选项,默认都是BEGINNING