"mm/dd/yyyy hh:mm:ss" 的 SAS 格式和信息是什么?

What is the SAS format and informat for "mm/dd/yyyy hh:mm:ss"?

问题

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 日期时间(作为数字)。我猜想可能有一种更简洁的方法来做到这一点,因此我很好奇是否已经有一个内置的 SAS 日期时间 mm/dd/yyyy hh:mm:ss 这将使我能够在一个解析中阅读它,就像这样:

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;

我对此进行了很多 Google 搜索,但没有成功。非常感谢!

编辑/更新(关于额外的研究工作和发现)

根据论坛的慷慨回复,我对定制(自制)格式 mdyhms 和 SAS 内置格式 mdyampm 进行了比较。

成功因素有:

定制格式 mdyhms 如下所示:

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

下面的比较练习揭示了一些有趣的观察结果:

现在比较练习...

格式大小写

*** bespoke mdyhms as a format (Winner);
data try_format_mdyhms;
  x = "25JUN2015:03:02:01"dt;  /* 1750820521 */
  put x;                       /* 1750820521 */
  put x:mdyhms.;               /* 06/25/2015 03:02:01 */
run;

*** built-in mdyampm as a format (Loser);
data try_format_mdyampm;
  x = "25JUN2015:03:02:01"dt;  
  put x;                       /* 1750820521 */
  put x:mdyampm.;              /* 6/25/2015  3:02 AM */
run;

信息案例

*** 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;

下一步:

是否有任何内置(and/or 定制)格式可以根据以下成功因素同时启用格式和信息格式:

(定制的mdyhms和内置的mdyampm似乎可以实现两者之一,但不能同时实现)。或者我错过了什么?

有两种格式可以读取文本“06/25/2015 03:02:01”并将其转换为正确的 SAS 日期时间值: ANYDTDTM 和 MDYAMPM

查看有关使用日期时间值的 Whosebug 答案 here。您应该能够更新它:

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