E aqui estamos mais uma vez para aprender como deixar nossos datasets melhor formatados. Dessa vez, falaremos de um problema recorrente em qualquer linguagem: datas. Como este campo pode vir em formato numérico ou texto, as pessoas tendem a ter problemas com operações ou até quando traçam gráficos utilizando eles. Sendo assim, hoje vamos aprender como formatar datas no SAS.
CRIANDO O DATASET EXEMPLO
Aqui, nós vamos criar uma tabela no SAS para fazer essas conversões:
data compras;
input dt_compra vlr_compras;
cards;
20151102 1000
20151010 500
20161201 650
20140130 900
;
run;
A tabela possui as datas das compras realizadas pelos clientes e os respectivos valores. Porém, ambas estão em formato numérico. Sendo assim, precisamos de algum tipo de conversão, certo? Voltamos ao problema que é como formatar datas no SAS.
OS COMANDOS FORMAT, INPUT E PUT
Inicialmente, o que você precisa saber é que existem comandos no SAS para esta tarefa, mas que eles requerem algumas combinações. No caso, você terá que trabalhar com o comando input(), o put – que faz conversão para texto antes – e o format. A seguir, você tem um exemplo onde eu criei um campo novo com a data formatada (é aconselhável para quem está começando manter o antigo para não perder a informação e comparar):
data formata_data;
set compras;
dt_compra_new = input(put(dt_compra, 8.), yymmdd10.);
format dt_compra_new yymmdd10.;
run;
E obtemos assim o seguinte resultado:
Como vocês podem ver, agora temos uma variável nova no formato de data. Isso facilita muito na hora de fazer análises e também cálculos envolvendo que envolvem este formato específico (e.g.: diferença de dias entre duas datas, pegar o mês do evento, etc.).
OUTROS FORMATOS
Em tempo, seria possível utilizar outros formatos de data seguindo o mesmo passo a passo. Por exemplo, yymmdd8.
Agora, vamos analisar o que aconteceria se tivéssemos uma situação em que a variável data estivesse em formato de texto:
/*Cria tabela exemplo*/
data compras;
input dt_compra $ vlr_compras;
cards;
20151102 1000
20151010 500
20161201 650
20140130 900
;
run;
Nesse caso, o que parece mais simples é repetir o feito anterior, porém excluindo o uso do put() (abaixo usando 8.):
data formata_data_2;
set compras;
dt_compra_new = input(dt_compra, yymmdd8.);
format dt_compra_new yymmdd8.;
run;
Simples não?
BÔNUS 1: ENCONTRANDO A DATA MAIS RECENTE OU ANTIGA COM PROC SQL
Quando você precisar utilizar a função max() ou min() no proc sql, para obter a data mais recente ou antiga, tome cuidado para que seu output não saia bagunçado. Fique de olho na formatação do campo. Sempre que você utilizar a função max() ou a função min() no proc sql, não se esqueça de utilizar format. Exemplo:
proc sql; select max(dt_compra_new) as maior_data format=date9. from formata_data_2; run;
Dúvidas, sugestões ou críticas, basta comentar ou enviar um e-mail.
BÔNUS 2: FUNÇÕES PARA DATAS NO SAS
Algumas funções simples utilizadas no SAS, para encontrar o dia, o mês, o ano e o dia da semana, respectivamente, da data em questão:
data funcoes_datas; set formata_data; dia = day(dt_compra); mes = month(dt_compra); ano = year(dt_compra); dia_da_semana = weekday(dt_compra); run;
E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados. E se você gosta de tecnologia, escute o podcast Futuristando!
Bons estudos!
Bom dia .. sensacional ..
Você poderia fazer um artigo demonstrando como realizar ações como (agrupar, remover duplicatas e tabela de referência cruzada) via query .. sem ser por sql. Pra nós que somos leigos trabalhamos com mais facilidade pelo query bilder
Fala Marcelo! Vou tentar fazer sim… a minha dificuldade em fazer tutoriais mais “point and click” é que eu só tenho o SAS University em casa. Mas eu vou tentar fazer uns tutoriais assim, pode deixar. Obrigado pela sugestão!
BOM DIA AMIGO!!
COMO FAÇO PARA TRANSFORMAR UM CAMPO DATA HORA TEXTO PARA O FORMATO DATETIME? É POSSÍVEL?
Ola Lucas, estou em viagem e sem o SAS disponivel. Pelo SAS University nao consigo porque nao tenho nenhuma base com dia e hora importada nesse formato. Mandei sua pergunta para um colega que deve conseguir testar, se ele conseguir, te informo amanha.
Olha, eu nao consigo validar, mas encontrei esse post https://communities.sas.com/t5/SAS-Programming/convert-character-date-time-string-to-SAS-format-datetime/td-p/383427 que diz para usar essa formula:
DATA test;
FORMAT DATE DATETIME14.;
DATE_CHAR=’02OCT07:2240′;
DATE=INPUT(CATX(“:”,SUBSTR(DATE_CHAR,1,10),SUBSTR(DATE_CHAR,11)),DATETIME14.);
RUN;
Veja se funciona e me avise tambem.
Abs!