如何转换此SAS日期值(以毫秒为单位)

时间:2016-05-24 15:44:10

标签: date datetime sas

我能够以这种格式转换日期" DD / MM / YYYY HH:MM:SS"以毫秒为单位,因为我在该网站上发现了一个有趣的问题。

但是我不能用它来实现我的目标。这是我的数据集:

%let first="05/23/2016 12:00:00 AM";
%let second=%sysfunc(intck(sec,%sysfunc(dhms('01jan1970'd,0,0,0)),%sysfunc(dhms('01jan1960'd,1,0,0))));
    data _null_;
        if "&first." ne ""
        then data_input=input("&first.",YYMMDD10.);
        else data_input=today();
        final=(dhms(data_input,0,0,0)+&second)*1000;
        CALL SYMPUT('final',final);
    run;
%PUT "Final:&final.";

这是输出:

Final:       .

为什么?

我尝试这样做:

then data_input=input("05/23/2016 12:00:00 AM",mdyampm.);

在这种情况下,我收到一条错误消息:

FATAL: DATA STEP compilation stopped due to syntax errors.

我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:1)

你正在过度思考这个问题。 input会得到你想要的东西。

%let first="05/23/2016 12:00:00 AM";

data _null_;
  data_input = input(&first.,mdyampm23.);
  put data_input= datetime17.;
  data_milliseconds = data_input*1000;
run;

input以秒为单位获取日期时间,然后乘以1000。

如果你需要调整到1970年代而不是1960年代,你可以做类似

的事情
%let first="05/23/2016 12:00:00 AM";
%let second=('01JAN1970:00:00:00'dt-'01JAN1960:00:00:00'dt);
data _null_;
  data_input = input(&first.,mdyampm23.) + &second.;
  put data_input= datetime17.;
  data_milliseconds = data_input*1000;
run;

反过来(1960年减去1970年),取决于你实际在做什么(将SAS dt转换为Unix或Unix转换为SAS)。