SAS日期时间格式为POSIX

时间:2013-03-21 09:07:56

标签: datetime posix sas

我希望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分钟内找不到它

2 个答案:

答案 0 :(得分: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,包括小数,它应该按预期工作。感谢提示的数据 null

答案 1 :(得分:0)

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