Como formatar datas no SAS

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!

9 comentários em “Como formatar datas no SAS”

  1. 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

    1. 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!

    1. 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!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *