2016-05-24 112 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その後、あなたは、代わりに1960エポックの1970エポックに調整する必要がある場合は、あなたが

%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; 
ような何かを1000

を掛け、秒単位で日時にあなたを取得

また、実際に何をしているのか(SAS dtをUnixまたはUnixからSASに変換する)に応じて、逆の場合(1960年から1970年)。

+0

ありがとうございます!私はあなたのソリューションで役に立たない2番目の変数ですので少し編集しました。ありがとう – newbiw

関連する問題