Datetime SAS格式和信息是什么;年月日hh:mm:ss;? 问题

Datetime SAS格式和信息是什么;年月日hh:mm:ss;? 问题,datetime,format,sas,informat,Datetime,Format,Sas,Informat,请在mm/dd/yyyy hh:mm:ss中是否有内置的SAS格式和日期时间信息?例如: 06/25/2015 03:02:01(2015年6月25日3点2分1秒) 背景 我正在尝试将CSV平面文件解析为SAS数据集,其中日期时间列当前以mm/dd/yyyy hh:mi:ss格式显示。我通常只是将其作为字符串读取,然后使用substr()函数选择日期和时间部分(作为字符串),使用informat解析SAS日期和时间(作为数字),然后将它们组合在一起形成SAS日期时间(作为数字)。我猜可能有一种更

请在
mm/dd/yyyy hh:mm:ss
中是否有内置的SAS格式和日期时间信息?例如:

06/25/2015 03:02:01
(2015年6月25日3点2分1秒)

背景 我正在尝试将CSV平面文件解析为SAS数据集,其中日期时间列当前以
mm/dd/yyyy hh:mi:ss
格式显示。我通常只是将其作为字符串读取,然后使用
substr()
函数选择日期和时间部分(作为字符串),使用informat解析SAS日期和时间(作为数字),然后将它们组合在一起形成SAS日期时间(作为数字)。我猜可能有一种更干净的方法可以做到这一点,因此我很好奇是否已经有了
mm/dd/yyyy hh:mm:ss
的内置SAS datetime,这将使我能够在一次解析中阅读此内容,如下所示:

data test;
    infile "c:\temp\test.csv" dlm=',' missover;
    input 
        dtvar : <the datetime format for mm/dd/yyyy hh:mm:ss>.
        var1 $
        var2 $
        ;
    format dtvar DATETIME19.;
run;
proc format;
  picture mdyhms
  other = '%0m/%0d/%Y %0H:%0M:%0S' (datatype=datetime);
run;
下面的比较练习揭示了一些有趣的观察结果:

  • 格式案例:定制格式的mdyhms是赢家
  • Informat案例:内置格式
    mdyampm
    是赢家
现在比较练习

格式盒 告密案 下一步: 是否有任何内置(和/或定制)格式可根据以下成功因素启用格式和信息:

  • 格式案例:能够将1748351045显示为“06/25/2015 03:02:01”
  • 信息案例:能够将“06/25/2015 03:02:01”转换为1748351045

(定制的
mdyhms
和内置的
mdyampm
似乎能够实现这两个功能中的一个,但不能同时实现这两个功能)。还是我遗漏了什么?

有两位线人可以阅读文本“06/25/2015 03:02:01”,并将其转换为正确的SAS日期时间值:
ANYDTDTM和MDYAMPM

查看使用日期时间值的stackoverflow答案。您应该能够使用以下内容对其进行更新:

proc format ;
  picture mdyhms 
  other='%0m/%0d/%0Y %0H:%0M:%0S' (datatype=datetime)
;run ;

可能的副本没有任何内置格式可以按您的需要显示日期时间值。实际上-您需要稍微调整它以包含第二个日期时间值:
other='%0m/%0d/%0Y%0H:%0m:%0S'
不幸的是,图片格式不能用作信息,因此,我怀疑这在本例中并不是非常有用。不过,在链接问题中还有另一个步骤,即使用
cntlin
的输入格式生成一个informat。。。。尽管@stigeide指出了
MDYAMPM
informat哪个更好。。。!这看起来不错-
MDYAMPM
informat可能更安全,尽管我认为使用任何DTDTM,您都可能会有误读日期的风险,例如
05/01/2015
被解读为
01MAY
05JAN
*** bespoke mdyhms as an informat (Loser);
data try_informat_mdyhms;
  x = input("06/25/2015 03:02:01",mdyhms.);  /* informat fail (error) */
  put x; 
run;

*** built-in mdyampm as an informat (Winner);
data try_informat_mdyampm;
  x = input("06/25/2015 03:02:01",mdyampm.);  /* 1750820521 */
  put x;                                      /* 1750820521 */
run;
proc format ;
  picture mdyhms 
  other='%0m/%0d/%0Y %0H:%0M:%0S' (datatype=datetime)
;run ;