Formatando Datas no SAS

Muitas vezes você vai ter que lidar com datas no SAS que estão no formato numérico ou caractere. Vamos abordar algumas formas de converter um campo para o formato numérico.

Aqui nós vamos criar uma base de dados 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, conforme apontado pelo programa (item Columns):

exemplo_sas_data_1

Como eu faço então para converter uma coluna no formato numérico para o formato de data do SAS?

Para isto, você deve combinar o comando input() com o put – que faz conversão para texto antes – e o format. No exemplo abaixo, 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:

fomata_data

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

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;

exemplo_sas_data_3

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;

Bons estudos!

Anúncios

4 comentários

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s