SAS宏以dhms格式表示日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS宏以dhms格式表示日期相关的知识,希望对你有一定的参考价值。
我有两个已解决的宏变量:
&beg is “01MAY2017”
&end is “31OCT2017”
我想创建具有日期格式dhms
的新宏
我尝试了下面的查询,但我得到1960年1月的价值:
%let start =%sysfunc(putn(&beg, datetime20.));
%let start1=%sysfunc(putn(&end, datetime20.));
以下是我得到的值:
01JAN1960:05:49:00
01JAN1960:05:53:03
我希望结果为01MAY2017:00:00:00
和31OCT2017:00:00:00
答案
日期时间格式期望您提供自1960年1月1日以来的秒数,但您已经为它提供了一个日期文字,它可以解析为天数。在应用格式之前,尝试使用dhms
转换为datetime:
%let BEG = '01MAY2017'd;
%let START = %sysfunc(dhms(&BEG,0,0,0),datetime20.);
%put START = &START;
另一答案
@ user667489具有良好而灵活的解决方案。
如果你需要系统地添加:00:00:00
,另一种方法就是:
%let start = %sysfunc(putn(&beg, date9.)):00:00:00;
另一答案
宏变量只包含文本。你如何使用它们决定了它们的含义。 SAS还将日期作为天数和日期时间存储为秒数。
现在,如果您的宏变量只包含一个看起来像DATE格式的日期的字符串,那么您只需附加一个看起来像TIME格式的时间的常量文本,以创建一个看起来像DATETIME格式的日期时间值的字符串。
%let beg=01MAY2017 ;
%let start=&beg.:00:00:00 ;
如果实际上宏变量中有日期值,则可以使用SAS函数将其转换为日期时间值。
例如,如果您的宏变量具有日期文字,则可以使用DHMS()函数生成日期时间文字。
%let beg='01MAY2017'd ;
%let start="%sysfunc(dhms(&beg,0,0,0),datetime20)"dt ;
如果您的宏变量只有原始未格式化的日期值(即天数),那么您可以将其转换为秒数。
%let beg=20940;
%let start=%sysfunc(dhms(&beg,0,0,0));
最终你将获得START = 1809216000。
以上是关于SAS宏以dhms格式表示日期的主要内容,如果未能解决你的问题,请参考以下文章