Diferença entre duas datas no SAS (em dias, meses ou anos)

Calcular a diferença entre duas datas no SAS é simples, basta subtrair uma data pela outra. Porém, se você quiser fazer a diferença em meses, anos, semanas ou alguma unidade do tipo, há duas escolhas: (1) realizar a subtração e depois dividir o valor pelo número de dias correspondentes ao período (ex.: dividir por 30 no caso de mês) ou (2) utilizar a função intck(). É desta segunda que vou falar neste post.

A sintaxe do intck() é bem simples e intuitiva, basta inserir as datas cujo intervalo será calculado e de que maneira você quer a saída (em dias, meses, anos, semanas):

data tabela_saida;
    set tabela_entrada;
    diferenca_das_datas = intck('periodo',data_mais_antiga, data_mais_atual);
run;

Ok, talvez a escolha dos nomes das variáveis não deixe tudo tão óbvio, mas você vai ver que não é difícil. Vamos ver como funciona isso na prática. Primeiro, criamos uma tabela qualquer para ser usada de exemplo:

data tabela_exemplo;
    input id $ data_1 date9. id2 $ data_2 date9.;
    format data_1 date9. data_2 date9.;
    datalines;
AA 01jan2000 AA 05mar2000
BB 02feb2005 BB 10apr2006
CC 10aug1990 CC 05jan1995
DD 11dec1999 DD 21dec1999
;
run;

Captura de Tela 2018-10-27 às 09.33.34

Sim, tem uma bizarrice de dois campos id. Como eu disse na descrição do site, também estou aprendendo, e neste aprendizado vi que ao retirar esta coluna id2, minha coluna data_2 veio missing. Se alguém um dia descobrir o motivo, me avisem. Enfim, continuando com o exemplo, vamos calcular a quantidade de anos entre as duas datas:

data tabela_exemplo_anos;
    set tabela_exemplo;
    dif_anos = intck('year', data_mais_antiga, data_mais_atual);
run;

Captura de Tela 2018-10-27 às 09.41.01

Veja que a diferença não chega a um ano no primeiro caso, portanto temos 0 como retorno. Podemos calcular a diferença de trimestres, meses, semanas ou dias úteis:

data tabela_exemplo_variados;
    set tabela_exemplo;
    dif_mes = intck('month', data_1, data_2);
    dif_tri = intck('qtr', data_1, data_2);
    dif_semana = intck('week', data_1, data_2);
    dif_dia_util = intck('weekday', data_1, data_2);
    dif_dia = intck('day', data_1, data_2);
run;

Captura de Tela 2018-10-27 às 09.33.59

Agora, peguemos um caso mais atípico e que possa causar confusão. Imagine que a data inicial seja 30 de janeiro de 2019 e a data final seja 5 de fevereiro de 2019. A diferença entre as duas datas não é de 30/31 dias. Como funciona a diferença em meses para essas datas?

Neste caso, há três possibilidades: usar a função da mesma forma que foi especificada no exemplo acima, usar a função declarando também um terceiro argumento “c” (contínuo) ou usar a função declarando um terceiro argumento “d” (discreto). Veja o resultado de cada uma das três opções:

data exemplo_mes;
    dif_mes_padrao = intck('month', '30jan2019'd,'05feb2019'd);
    dif_mes_c = intck('month', '30jan2019'd,'05feb2019'd,"c");
    dif_mes_d = intck('month', '30jan2019'd,'05feb2019'd,"d");
run;

Captura de Tela 2018-10-27 às 09.37.35

Note que tivemos os resultados 1, 0 e 1 respectivamente. Ou seja, quando utilizamos o argumento “c”, estamos tratando do mês completo, não somente do fato das duas datas pertencerem a meses diferentes. Um exercício interessante é trocar 5 de fevereiro por 27 e 28. Você vai notar que para 27, o retorno com o argumento “c” ainda será 0. Porém, para 28, será 1.

intck() é uma função fácil de se aplicar, bem intuitiva e muito melhor do que ficar calculando a diferença de dias e dividindo por 30 – o último exemplo utilizado aqui mostra isso claramente. Creio que possa ser útil, pois data é um dos maiores empecilhos para qualquer um trabalhando com SAS.

Ficamos por aqui! Dúvidas, críticas ou sugestões é só mandar um comentário ou uma mensagem no formulário que está em Sobre o Estatsite. Siga o EstatSite no Twitter para algumas dicas mais rápidas -> @EstatSite

Abraços e bons estudos!

Anúncios

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 )

Conectando a %s