Во многих случаях ANYDTDTM
может быть хорошим источником информации, однако, как вы указали (в комментариях), это не так для формата даты и времени, представленного в вопросе.
Строка может быть перестроена в виде даты и времени в формате SAS с использованием cats
и scan
data have;
date_string = "SAT Mar 17 01:29:17 IST 2018";
run;
data want;
set have;
dt_wrong = input(date_string, anydtdtm.);
dt_right = input ( cats
( scan(date_string,3),
scan(date_string,2),
scan(date_string,6),':',
scan(date_string,4)
), datetime20.);
put date_string= /;
put dt_right= datetime20. " from input of cats of string parts";
put dt_wrong= datetime20. " from anydttm ";
run;
* sample macro that can be applied in data step or sql;
%macro dts_to_datetime(dts);
input ( cats
( scan( &dts , 3),
scan( &dts , 2),
scan( &dts , 6), ':',
scan( &dts , 4)
)
, datetime20.)
%mend;
data want2;
set have;
dt_righton = %dts_to_datetime(date_string);
format dt_righton datetime20.;
put dt_righton=;
run;
Макрос также можно использовать в where
инструкциях, таких как
where '18-Mar-2018:0:0'DT <= %dts_to_datetime (date_string)
Или SQL
, %dts_to_datetime (date_string) as event_dtm format=datetime20.