如何定义给定日期的日期格式

时间:2018-04-27 05:19:07

标签: date datetime sas formatting

我想知道,我们如何从给定日期定义日期格式

例如,我的日期是20180423然后在sas中我想将格式定义为'yyyymmdd'

类似地,我在数据中给出的日期为12022018然后我想定义为'ddmmyyyy'

请注意,日期是在适当的日期提供给我的,但我想现在定义格式。 给出的日期将来可能会有所不同 所以我需要通过SAS

来处理所有的日期格式

我的想法是20180422年 使用substr函数

data test;
a=20180422;
a=substr(a,1,4);
b=substr(a,5,1);
c=substr(a,7,1);
run;

但不确定。

如果有人能提供解决方案,那么它对我的项目工作有帮助。

先谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

听起来您想要将各种值转换为日期。 SAS将日期存储为一个数字,即自1960年1月1日以来的天数。然后通常将此数字格式化为日期,以任何格式首选。

导入已经采用格式的日期时,必须使用input函数以及信息将格式化的值转换为SAS日期。如果读入的日期值都采用相同的格式,则可以使用特定的信息。在您使用不同格式的情况下,您可以使用anydtdte.信息将大多数标准日期格式转换为SAS日期。

以下示例将3种不同的日期格式转换为SAS日期,然后以date9.格式显示SAS日期。我已经将未格式化和格式化的新值打印到日志中,这样您就可以看到它们存储为数字。

data _null_;
input date_in $20.;
date_out = input(date_in, anydtdte20.);
put date_in date_out date_out :date9.;
datalines;
20180422
12022018
27apr2018
;
run;

答案 1 :(得分:2)

使用input(a,anydtdte20.);这会将任何日期转换为SAS日期,然后使用函数Year()Month()Day()来提取所需的数据。 您会发现此SAS Post对日期和区域设置非常有用。

解决方案:

我创建了一个包含两行的表;每一行都有不同的日期格式YYYYMMDD& DDMMYYYY向您展示代码如何处理不同的日期格式,将它们保存到SAS日期并将它们分解为年,月和日。天:

options DATESTYLE=DMY;
data have;
input a;
datalines;
20180422
12022018
;
run;

data test;
set have;
format date_a date9.;
date_a=input(a,anydtdte20.);
Year_a=year(date_a);
month_a=month(date_a);
day_a=day(date_a);
run;

输出:

a=20180422 date_a=22APR2018 Year_a=2018 month_a=4 day_a=22 
a=12022018 date_a=12FEB2018 Year_a=2018 month_a=2 day_a=12

Output

答案 2 :(得分:0)

您可以在数据步骤中使用if条件。使用If条件,检查条件是否为真(检查日期值满足所需条件),然后使用put函数格式化日期.Put函数可以将source作为第一个参数并格式化为第二个参数,并返回格式化值。同一列的不同值可以采用不同的格式指定。

像这样,

  if a = 'date1CheckCondtion' then newA = put(a , dateformat1.);
  if a = 'date2' then newA = put(a , dateformat2.);

然后,您可以选择以如下常见格式获取所有值:

  dateA=input(newA,mmddyy6.);