2016-05-24 117 views
2

我可以以毫秒爲單位轉換格式爲「DD/MM/YYYY HH:MM:SS」的日期,因爲我在該網站中發現了一個有趣的問題。如何轉換此SAS日期值(以毫秒爲單位)

但是我不能用它來達到我的目標。這是我的數據集:

%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

你正在推翻這一點。 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)。

+0

感謝它的工作!我做了一點編輯,因爲你的解決方案是無用的第二個變量。謝謝 – newbiw

相關問題