Novamente vou falar de datas no SAS. É sempre mais difícil trabalhar com datas em qualquer linguagem de programação. Por isso sempre que eu lembro de algo a respeito disso eu trato de escrever aqui porque acho que pode ajudar alguém. Dessa vez vamos aprender como descobrir a distância entre duas datas de algumas formas diferentes.
Voltando ao nosso exemplo dos alunos, nós já tínhamos suas notas e número de faltas, agora vamos acrescentar a data de nascimento deles:
data turma_1;
input notas faltas dt_nasc ddmmyy10.;
format dt_nasc date9.;
datalines;
3.6 13 20/02/1999
3.6 15 15/04/1999
5 9 02/10/1999
6.4 8 01/05/1999
6.6 7 10/03/1999
6.6 8 12/11/1998
6.8 8 14/08/1999
7.5 5 23/02/1999
8 4 30/07/1999
8.7 3 08/03/1999
9 1 24/02/1999
9.5 1 15/11/1999
;
proc print;
run;
Veja como calcular a diferença entre as datas, primeiro de uma forma bem intuitiva apenas com a subtração entre a data de hoje e a do nascimento. Em seguida com as funções datdif e yrdif.
/*Acrescentando as colunas com diferença entre as datas*/
data Turma_1_v1;
set Turma_1;
dif_Dias=today()-dt_nasc;
dif_Dias_2=datdif(dt_nasc,today(),'act/act');
dif_Dias_3=datdif(dt_nasc,today(),'30/360');
idade=yrdif(dt_nasc,TODAY());
run;
Como vocês podem ver, foram criados 3 campos utilizando fórmulas diferentes:
- Dif_Dias = Diferença entre o dia de hoje e a data de nascimento em dias;
- Dif_Dias2 = Diferença entre o dia de hoje e a data de nascimento em dias, utilizando o parâmetro ‘act/act’ para que o SAS entenda que a gente quer que o cálculo considere os dias reais entre as duas datas, considerando o número de dias que cada mês tem de acordo com o calendário;
- Dif_Dias3 = Diferença entre o dia de hoje e a data de nascimento em dias, utilizando como padrão que cada mês tem 30 dias e cada ano 360 dias. Isso pode ser útil para pessoas da área de finanças que precisam calcular retorno de alguns títulos;
- Idade = Diferença entre o dia de hoje e a data de nascimento em anos. Como não especificamos nada no terceiro parâmetro, o SAS nos traz a diferença considerando o calendário. O mesmo método utilizado em dif_dias poderia ter sido utilizado aqui.
Agora, ficou bem ruim essa idade com várias casas decimais. Eu recomendo trocar aquela linha por esse código com a função round:
idade=round(yrdif(dt_nasc,today()));
Função INTCK
Essa é mais uma função do SAS para lidar com datas, veja só como é intuitiva:
data Turma_1_v2;
set Turma_1;
dif_meses=intck('month',dt_nasc,today());
dif_anos=intck('year',dt_nasc,today());
dif_dias=intck('day',dt_nasc,today());
dif_semestres=intck('semiyear',dt_nasc,today());
dif_trimestres=intck('qtr',dt_nasc,today());
run;
Nota: Se você estiver comparando duas datas do mesmo ano, dif_anos retornará zero. O mesmo vale para os demais. Caso você se confunda e coloque a data mais recente antes da data mais antiga, você receberá valores negativos (o que é intuitivo mas vale lembrar).
Gostou do post? Por favor, não vá embora sem deixar uma curtida ou um comentário. Parece algo bobo, mas é um feedback bastante importante para este trabalho. Se encontrou algum erro ou tem alguma sugestão, dúvida, elogio ou crítica, pode escrever nos comentários ou me enviar uma mensagem diretamente em Sobre o Estatsite. E visite também a conta do Twitter @EstatSite.
Forte abraço e bons estudos!