我能够以这种格式转换日期" 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.
我该如何解决?
谢谢
答案 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)。