如何在sas中获取标志和日期格式

时间:2019-08-24 15:48:12

标签: sas

嗨,我对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编码来完成此任务吗?

1 个答案:

答案 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

您可以使用函数DATEPARTTIMEPART来分隔日期时间值的日期和时间部分

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