2009-09-07 17 views
7

¿Alguien puede aconsejar sobre la información SAS apropiada para leer en un datetime (dd/mm/aaaa hh: mm) ???sas informat datetime

por ejemplo

data _null_; 
informat from_dt datetime????.; 
input from_dt ; 
put from_dt=; 
cards; 
01/01/1960 00:00 
;run; 

Respuesta

8

No creo que la información específica esté incorporada, pero es relativamente fácil hacer la suya propia. A continuación se muestra un ejemplo de creación de una información personalizada de fecha y hora (esto requiere un conjunto de datos cntlin) y un formato personalizado (usando la declaración de la imagen) que se lee en su fecha y hora específica y luego vuelve a formatear para que se vea igual que la entrada. Lo simplifiqué suponiendo que la parte del tiempo era siempre la medianoche (00:00), pero puede expandirse fácilmente si también necesita realizar un seguimiento de las partes de la hora (simplemente cambie el número 86400 a 3600 para obtener cada hora, y 60 por cada minuto). Ayuda a ver qué sucede si abre el conjunto de datos work.infmt para ver cómo se ve.

/* Create a custom datetime format as Month/Day/Year<space>Hours:Minutes*/ 
proc format; 
    picture mydt other='%0m/%0d/%0Y %0H:%0M' (datatype=datetime); 
run; 

/* Create a custom informat using the format above */ 
data infmt ; 
retain fmtname "dtwithspace" type "I" ; 
    do label = "1jan1960:00:00"dt to 
       "2jan2059:00:00"dt by 86400 ; 
     start = trim(left(put(label,mydt.))); 
     output ; 
    end ; 
run ; 
proc format cntlin = infmt ; 
run ; 


/* Now apply the informat and format to the data */ 
data _null_; 
input from_dt $ 1-20; 
format from_dt2 mydt.; 
from_dt2=input(from_dt, dtwithspace.); 
put from_dt2=; 
cards; 
01/01/1960 00:00 
01/02/1999 00:00 
; 
run; 

Esto dio una salida como esta:

278 data _null_; 
279 input from_dt $ 1-20; 
280 format from_dt2 mydt.; 
281 from_dt2=input(from_dt, dtwithspace.); 
282 put from_dt2=; 
283 cards; 

from_dt2=01/01/1960 00:00 
from_dt2=01/02/1999 00:00 
0

This entry de la SAS knowledgebase incluye código para el análisis y la fecha y hora de formato. Parece que SAS tiene un gran sistema de ayuda en línea.

El tercer mensaje en this exchange on Google groups puede ser útil también. Habla sobre la entrada de fecha y hora y proporciona el código.

Su pregunta es tan difícil de descifrar, y sé muy poco acerca de SAS, eso es todo lo que puedo ofrecer. Espero eso ayude.

5

SAS puede no ser compatible el formato de fecha y hora específica los datos están en Usted podría tratar de convertir los datos entrantes a un formato frendlier o se puede analizar la fecha y hora utilizando los substr, DHMS and MDY funciones:.

data test; 
    format dtstr $16. dt datetime22.4; 
    dtstr='01/01/1960 00:00'; 
    day=substr(dtstr,1,2); 
    month=substr(dtstr,4,2); 
    year=substr(dtstr,7,4); 
    hour=substr(dtstr,11,2); 
    minute=substr(dtstr,15,2); 
    dt=DHMS(MDY(1*month,1*day,1*year),1*hour,1*minute,0); 
    output; 
run; 

o, alternativamente, se podría convertir la cadena de fecha y hora en un formato datetimew.d y la entrada de la cadena con formato:

data test; 
    format dtstr $16. dstr $8. tstr $5. indtstr $14. dt datetime22.4; 
    dtstr='01/01/1960 00:00'; 
    dstr=put(input(substr(dtstr,1,10),mmddyy10.),date8.); 
    tstr=substr(dtstr,12); 
    indtstr=dstr!!':'!!tstr; 
    dt=input(indtstr,datetime14.0); 
    output; 
run; 

la conversión puede ser comprimido a una sola pero compleja declaración, por lo que crear una macro para este podría ser una buena decisión.

0

Pasando por la lista here, no creo que exista.

Posiblemente podría crear la suya con proc format, pero creo que eso sería muy difícil. La sugerencia de Ville Koskinen es probablemente la mejor opción.

8

El anydt * familia de informats hacer el trabajo, por lo general.

data _null_; 
    from_dt = input("01/01/1960 00:00", anydtdtm.); 
    put from_dt= :datetime20.; 
run; 
/* on log 
from_dt=01JAN1960:00:00:00 
*/ 
+0

Niza - No había visto esa información antes. – cmjohns

+0

Si alguien está intentando esto y tiene problemas con la interpretación incorrecta del mes y la fecha, intente actualizar la datestyle ejecutando 'options datestyle = dmy;' antes del ejemplo anterior –