嗨,我对sas有一个疑问 数据集日期格式中的日期为08-04-1988 基于此值,我想创建日期样式和标记值 对于datetime标志创建,如果dateandtime则考虑标志1否则0 对于日期,如果日期已考虑,则考虑标志1否则0 如果时间已到,请考虑标记1否则为0
DATA DAT;
X= "08APR1988"D;
FORMAT X DDMMYYD10.;
RUN;
基于上面的值,我希望像下面这样输出
Datetime | Date | Time | DatetimeFlag | DateFlag |TimeFlag
08APR1988 00:00:00 |08-04-1988 |00:00:00 | 0 |1 |0
我尝试如下
DATA DUMM;
SET DAT;
DT=PUT( X, DDMMYY10.);
DATEF=PUT( X, date9.);
DTs=PUT( X, DATETIME32.);
TimeF=PUT( X, TIME.);
RUN;
在这里如果没有时间,则其默认日期与时间相似 如果时间不可用,我想显示,然后考虑00:00:00,如果日期不可用,则类似日期aslo:1960-01-01
但是上面的脚本没有给出expeted结果, 您能告诉我如何编写sas编码来完成此任务吗?
答案 0 :(得分:0)
SAS具有两种值类型,数字和字符。
日期和日期时间值是带有处理的数字。
日期值是自1960年1月1日以来的天数。 DateTime值是自01JAN1960以来的秒数。
非整数日期值不会得到特殊的解释(在其他日期系统中,例如Excel,数字的小数部分也是当天的分数)
非整数DateTime值是小数秒。
您可以将日期转换为日期时间,方法是乘以一天中的秒数(86,400)
假设您有一个非整数的日期值,例如
data _null_;
D = '01JAN2019'D + 0.5;
format D yymmdd10.;
put D= / D=best12.;
DT = D * 86400;
format DT datetime21.2;
put DT= / DT=best12.;
run;
---------- LOG ----------
D=2019-01-01
D=21550.5
DT=01JAN2019:12:00:00.00
DT=1861963200
您可以使用函数DATEPART
和TIMEPART
来分隔日期时间值的日期和时间部分
data have;
dt = '01FEB2019:12:34:56.78'DT; output;
dt = '15FEB2019:00:00:00'DT; output;
format dt datetime21.2;
run;
data want;
set have;
d = datepart (dt);
t = timepart (dt);
format d yymmdd10.;
format t time12.2;
dt_is_just_date = (t eq 0);
dt_has_time_part = (t ne 0);
run;
proc print data=want;
run;
-------
dt_is_ dt_has_
just_ time_
Obs dt d t date part
1 01FEB2019:12:34:56.78 2019-02-01 12:34:56.78 0 1
2 15FEB2019:00:00:00.00 2019-02-15 0:00:00.00 1 0