SAS 9.3 DATETIME VARIABLE FORMAT作为日期

时间:2013-06-18 22:02:34

标签: datetime sas

我有一个datetime22.3变量,我希望将其显示为日期。

例如我希望在07/17/2006显示17JUL2006:00:00:00.000

我该怎么做?

感谢。


其他信息:

感谢所有回复。

实际上,我试图在proc sql中以日期格式输出它。输出打印为**********(星号)。我不确定发生了什么。

我试图以下列方式使用INTCK,但会出错。我不确定我做错了什么。我很感激你的帮助。感谢。

PROC FORMAT;
PICTURE DTFMT LOW-HIGH='%0m/%0d/%Y'  (DATATYPE=DATETIME);
RUN;

data want;
dt_val1='17JUL2006:00:00:00.000'dt;
dt_val2='17AUG2012:00:00:00.000'dt;
format dt_val1 dt_val2 dt_val3 dtfmt.;
dt_val3=intck('MONTH',dt_val1,dt_val2);
put dt_val3;
run; 

8 个答案:

答案 0 :(得分:3)

您不能直接对日期时间值应用标准日期格式,尽管有一些日期格式可以在前面加上“DT”,它会将日期时间显示为日期。不幸的是,MMDDYY格式不是其中之一,但您可以使用DTDATE9。这会将您的日期时间格式化为'17JUL2006'。

另一种选择是使用PICTURE语句创建自己的格式,下面的示例将根据需要显示日期时间。

proc format;
picture dtfmt low-high='%0m/%0d/%Y' (datatype=datetime);
run;

data want;
dt_val='17JUL2006:00:00:00.000'dt;
format dt_val dtfmt.;
run;

答案 1 :(得分:3)

put(datepart(datetimevariable),yymmdd10.)

答案 2 :(得分:2)

在数据步骤中使用相同的princpiple

data _null_;
   a='17JUL2006:00:00:00.000'd;
   put a;
   put 'formatted date='a MMDDYY10.;
run;

这是我的SAS 9.3的输出

44   data _null_;
45   a = '17JUL2006:00:00:00:000'D;
46   put a;
47   put 'formatted ' a MMDDYY10.;
48   run;

16999
formatted 07/17/2006
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds

答案 3 :(得分:1)

在SAS中格式化日期可能会非常棘手。我在宏中使用的一种方法是:

/* get the date time */
%let start_date=%sysfunc(datetime().,10);
/* use the DATETIME informat to format the date */
%let fmt_start_date=%sysfunc(putn(&start_date, DATETIME.)); 
/* format the datetime as a date */
%put "&fmt_start_date."d;

有许多不同的格式化日期的方法。如果您在数据步骤中,也可以使用FORMAT语句:

FORMAT STARTDATE YYMMDD10.;

在这种情况下,数据步骤中列的格式将为您提供YYYY-MM-DD,然后您可以分离值并从那里重建。

此处提供有关日期的SAS信息的其他信息: http://support.sas.com/documentation/cdl/en/etsug/60372/HTML/default/viewer.htm#etsug_intervals_sect008.htm

在这里: http://support.sas.com/documentation/cdl/en/etsug/63348/HTML/default/viewer.htm#etsug_intervals_sect009.htm

如果您需要更多信息或示例,请告知我们。

祝你好运!

答案 4 :(得分:1)

如果您希望显示变量的内容作为日期(不更改基础值),请使用FORMAT语句。

proc print;
    format dte mmddyys10.;
run;

proc means;
    class dte;
    format dte mmddyys10.;
run;

等。请注意,您也可以将FORMAT放入数据步骤,在这种情况下,变量的任何使用都会自动将其取出。

data foo;
    format dte mmddyys10.;
run;

答案 5 :(得分:0)

我的答案来自一个重复的问题:

您需要使用DATEPART()函数将原始SAS DATETIME值(将其视为数据类型)转换为SAS DATE值并应用适当的格式:

proc sql; 
 create table work.abc2
 as select *, DATEPART(a.Billing_Dt) format ddmmyy10. as Bill_date
from abc;
quit;

正如Keith所指出的那样,重点是将适当类型的格式(例如ddmmyy10。是SAS日期格式)应用于适当的值=可变内容(例如(未格式化)10是1960年1月11日用作日期,如果用作日期时间值,则为01JAN60:00:00:10),因此您必须确定您的值代表什么,并在需要时转换值。

答案 6 :(得分:0)

data want;
dt_val1='17JUL2006:00:00:00.000'dt;
dt_you_want=input(substr(put(dt_val1,datetime22.3),1,9),date9.);
format dt ddmmyy10.;
run; 

答案 7 :(得分:-1)

将日期/时间var转换为char日期var:

BLEndDatex = put(datepart(BLEndDateTime),yymmdd10.);

创建没有时间的数字sas日期:

BLEndDate = mdy(SUBSTR(BLEndDatex,6,2),SUBSTR(BLEndDatex,9,2),SUBSTR(BLEndDatex,1,4));

感谢Rizier123& Heemin在第一部分上面发布。