2

我希望 SAS 以 POSIX 格式格式化日期时间。以下给出“2009-11-25 14:44:56”我如何显示毫秒?

proc format;
    picture POSIX other='%0Y-%0m-%0d %0H:%0M:%0S' (datatype=datetime);
run;
data test;
  mydatetime='25nov2009 14:44:56.300'dt;
  format newdt POSIX.;
  newdt=mydatetime;
  put mydatetime= newdt=;
run;

编辑:我什至采用任何方式将日期时间格式化为YYYY-MM-DD HH:M:SS.sss(ISO8601)惊人的我在不到 1 分钟内找不到这个

4

2 回答 2

3

E8601DT23.3 应该按照您的意愿显示您的值,除了额外的“T”分隔符;SAS似乎要求这样做。如果您要输入字符值,则可以轻松删除“ T”;如果您尝试使用格式化的数值,我认为您将不得不忍受它。

data test;
  mydatetime='25nov2009 14:44:56.356'dt;
  format newdt E8601DT23.3;
  newdt=mydatetime;
  put mydatetime= newdt=;
run;

ISO8601 SAS 指南:

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm

编辑:SAS-L 通过这个(http://listserv.uga.edu/cgi-bin/wa?A1=ind1303c&L=sas-l#8)。如果您有 9.3,这应该可以工作(不是 9.2 或更早版本)。

proc format;
    picture POSIX other='%0Y-%0m-%0d %0H:%0M:%0s' (datatype=datetime);
run;
data test;
  mydatetime='25nov2009 14:44:56.300'dt;
  format newdt POSIX23.3;
  newdt=mydatetime;
  put mydatetime= newdt=;
run;

小 s,包括小数,它应该按预期工作。感谢 data null的提示。

于 2013-03-21T14:25:28.753 回答
0

此解决方案仅适用于 10-59 的秒值。它不适用于秒 0-9 的值。第二个 0-9 的值没有前导零。

于 2015-11-03T19:54:54.123 回答