"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
进行了比较。
成功因素有:
- 格式大小写:能够将1748351045显示为“06/25/2015 03:02:01”
- 信息格式:能够将“06/25/2015 03:02:01”转换为 1748351045
定制格式 mdyhms
如下所示:
proc format;
picture mdyhms
other = '%0m/%0d/%Y %0H:%0M:%0S' (datatype=datetime);
run;
下面的比较练习揭示了一些有趣的观察结果:
- 格式案例:定制格式
mdyhms
获胜。
- Informat 案例:内置格式
mdyampm
获胜。
现在比较练习...
格式大小写
*** 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 定制)格式可以根据以下成功因素同时启用格式和信息格式:
- 格式大小写:能够将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
查看有关使用日期时间值的 Whosebug 答案 here。您应该能够更新它:
proc format ;
picture mdyhms
other='%0m/%0d/%0Y %0H:%0M:%0S' (datatype=datetime)
;run ;
问题
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
进行了比较。
成功因素有:
- 格式大小写:能够将1748351045显示为“06/25/2015 03:02:01”
- 信息格式:能够将“06/25/2015 03:02:01”转换为 1748351045
定制格式 mdyhms
如下所示:
proc format;
picture mdyhms
other = '%0m/%0d/%Y %0H:%0M:%0S' (datatype=datetime);
run;
下面的比较练习揭示了一些有趣的观察结果:
- 格式案例:定制格式
mdyhms
获胜。 - Informat 案例:内置格式
mdyampm
获胜。
现在比较练习...
格式大小写
*** 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 定制)格式可以根据以下成功因素同时启用格式和信息格式:
- 格式大小写:能够将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
查看有关使用日期时间值的 Whosebug 答案 here。您应该能够更新它:
proc format ;
picture mdyhms
other='%0m/%0d/%0Y %0H:%0M:%0S' (datatype=datetime)
;run ;