我有一个datetime22.3变量,我希望将其显示为日期。
例如我希望在07/17/2006显示17JUL2006:00:00:00.000
我该怎么做?
感谢。
其他信息:
感谢所有回复。
**********
(星号)。我不确定发生了什么。我试图以下列方式使用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;
答案 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
如果您需要更多信息或示例,请告知我们。
祝你好运!
答案 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在第一部分上面发布。