/ / strings de data e hora não podem ser lidas corretamente no SAS - data, sas, informat

as seqüências de data e hora não podem ser lidas corretamente no SAS - date, sas, informat

Tenho os seguintes dados de amostra para ler no SAS

2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS

No entanto, há um problema estranho me incomodando. Aqui está minha primeira tentativa.

data test;
informat DT yymmdd10.
TM $TIME8.
orig $3.
;
format DT yymmddd10.
TM TIME8.
orig $3.
;
input
@1 DT_temp
@11 TM_temp
@19 orig
;
datalines;
2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS
run;

O resultado mostra

DT TM orig
.   .   NYA
.   .   SNW
.   .   NYA
.   .   NSL
.   .   DEN
.   .   PHX
.   .   FTW
.   .   HOB
.   .   HGR
.   .   RCH
.   .   NAS

Isso significa que a data e a hora não são lidas corretamente. Uma solução que tenho agora é ler tudo como string primeiro e depois convertê-lo em data e hora, respectivamente.

data test;
informat DT_temp $10.
TM_temp $8.
orig $3.
;
format DT yymmddd10.
TM TIME8.
orig $3.
;
input
@1 DT_temp
@11 TM_temp
@19 orig
;
DT=input(strip(DT_temp),yymmdd10.);
TM=input(strip(TM_temp),time8.);

drop DT_temp TM_temp;
datalines;
2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS
run;

Desta forma, tudo fica no formato correto.

orig DT TM
NYA 2012-05-03  17:36:00
SNW 2012-05-04  10:29:00
NYA 2012-05-24  18:45:00
NSL 2012-05-29  22:24:00
DEN 2012-05-31  7:26:00
PHX 2012-05-26  6:10:00
FTW 2012-05-02  2:30:00
HOB 2012-05-02  20:45:00
HGR 2012-05-01  3:01:00
RCH 2012-05-01  20:30:00
NAS 2012-05-11  12:00:00

Basicamente, esses dois métodos usaram a mesma informação. Fiquei me perguntando por que o primeiro método não funciona. Agradeço qualquer tipo de ajuda. Muito obrigado.

Respostas:

2 para resposta № 1

Seu código de "primeira tentativa" contém alguns erros, mas suponho que eles foram introduzidos ao escrever a pergunta.

Porque você está usando orientação por coluna input, você precisa especificar o formato a ser usado para cada variável. Aqui está uma versão corrigida:

data test;
informat DT yymmdd10.
TM TIME8.
orig $3.
;
format DT yymmddd10.
TM TIME8.
orig $3.
;
input
@1 DT  yymmdd10.
@11 TM  TIME8.
@19 orig $3.
;
datalines;
2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS
run;