Datetime SAS 9.3日期时间变量格式为日期

Datetime SAS 9.3日期时间变量格式为日期,datetime,sas,Datetime,Sas,我有一个datetime22.3变量,我想显示为date 例如,我想将Jul2006:00:00.000显示为07/17/2006 我该怎么做 谢谢 其他信息: 谢谢你的回复 实际上,我试图在procsql中以日期格式输出它。输出打印为*********(星形)。我不知道发生了什么事。 我正试图以以下方式使用INTCK,但出现了错误。我不确定我做错了什么。谢谢你的帮助。谢谢 PROC FORMAT; PICTURE DTFMT LOW-HIGH='%0m/%0d/%Y' (DATATYPE=

我有一个datetime22.3变量,我想显示为date

例如,我想将Jul2006:00:00.000显示为07/17/2006

我该怎么做

谢谢


其他信息:

谢谢你的回复

实际上,我试图在procsql中以日期格式输出它。输出打印为
*********
(星形)。我不知道发生了什么事。 我正试图以以下方式使用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; 

在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信息提供者日期的其他信息:

在这里:

如果你需要更多的信息或例子,请让我知道


祝你好运

在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信息提供者日期的其他信息:

在这里:

如果你需要更多的信息或例子,请让我知道


祝你好运

在数据步骤中使用相同的原则

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

在数据步骤中使用相同的原则

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
如果要将变量的内容显示为日期(而不更改基础值),请使用FORMAT语句

proc print;
    format dte mmddyys10.;
run;

proc means;
    class dte;
    format dte mmddyys10.;
run;
请注意,您也可以将格式放入数据步骤中,在这种情况下,变量的任何使用都将自动拾取该格式

data foo;
    format dte mmddyys10.;
run;
如果要将变量的内容显示为日期(而不更改基础值),请使用FORMAT语句

proc print;
    format dte mmddyys10.;
run;

proc means;
    class dte;
    format dte mmddyys10.;
run;
请注意,您也可以将格式放入数据步骤中,在这种情况下,变量的任何使用都将自动拾取该格式

data foo;
    format dte mmddyys10.;
run;

您不能直接针对datetime值应用标准日期格式,尽管有些日期格式可以以“DT”作为前缀,将日期时间显示为日期。不幸的是,MMDDYY格式不是其中之一,但是您可以使用DTDATE9。将日期时间格式化为“2006年7月17日”

另一个选项是使用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;

您不能直接针对datetime值应用标准日期格式,尽管有些日期格式可以以“DT”作为前缀,将日期时间显示为日期。不幸的是,MMDDYY格式不是其中之一,但是您可以使用DTDATE9。将日期时间格式化为“2006年7月17日”

另一个选项是使用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;

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

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

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日,如果用作日期时间值,则为01年1月60:00:00:10),因此,您必须确定您的值代表什么,并在需要时转换这些值。

我重复问题的答案:

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; 
您需要使用DATEPART()函数将原始SAS日期时间值(将其视为数据类型)转换为SAS日期值,并应用适当的格式:

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日,如果用作日期时间值,则为01年1月60:00:00:10),因此,您必须确定您的值代表什么,并在需要时转换这些值。

将日期/时间变量转换为字符日期变量:

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; 
BLEndDatex = put(datepart(BLEndDateTime),yymmdd10.);
创建无时间的数字sas日期:

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

感谢Rizier123和Heemin在上面的第一部分发表的文章。

将日期/时间变量转换为字符日期变量:

BLEndDatex = put(datepart(BLEndDateTime),yymmdd10.);
创建无时间的数字sas日期:

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

感谢Rizier123和Heemin在上面第一部分的帖子。

您正在创建变量“a”作为日期,而不是日期时间。该格式不适用于日期时间值。我同意您的输出,但您应该将“a”存储为“17JUL2006:00:00:000”DT以使其成为日期时间值您正在创建变量“a”作为日期,而不是日期时间。该格式不适用于日期时间值。我同意您的输出,但您应该将'a'存储为'17JUL2006:00:00:000'DT,以使其成为日期时间值。Keith,请您将我的问题看到底部好吗?但愿我没有犯愚蠢的错误。谢谢。我在查看表格时必须加宽栏才能看到值,这是你的问题吗?基思,你能看看我的问题到底部吗?但愿我没有犯愚蠢的错误。谢谢。我在查看表格时必须加宽列以查看值,这是您的问题吗?虽然此代码示例可能会回答此问题,但最好在此处包含一些对答案的基本解释。虽然此代码示例可能会回答此问题,最好在这里包括一些对答案的基本解释。