Começaremos uma série de dicas sobre manipulação de data com SAS. E a partir disto vamos começar do ínicio.
Como o SAS armazena datas ?
No SAS, cada data é um número exclusivo em uma linha numérica. As datas anteriores a 1º de janeiro de 1960 são números negativos; aqueles depois de 1º de janeiro de 1960, são positivos. Como os valores de data SAS são variáveis numéricas, você pode classificá-los facilmente, determinar intervalos de tempo e usar datas como constantes, como argumentos em funções SAS ou em cálculos.
Fonte: https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/basess/p1m2pok52uqfc3n16ebk28rrm7pl.htm
Como encontramos datas sendo guardadas por ai?
Encontramos datas das mais variadas formas e formatos possíveis e de maneiras mais criativas possíveis, como nos exemplos abaixo (pensando no dia 3 de abril de 2023):
3/4/2023, 4/3/2023, 3ABR2023, 030423, 04032023, 03ABR2023, 20230403, etc
Como o SAS lê estas datas ?
O SAS ou a linguagem SAS utiliza-se dos INFORMATs para facilitar sua interação não apenas com datas, mas com outros tipo de dados também para leitura. Focaremos nesta séria apenas na leitura de dados de tipo DATA, fiquem à vontade para explorar todas as possibilidades no link abaixo:
SAS INFORMATS: https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/leforinforref/n0cq8eha2o93mdn1lg8n5ursmkxm.htm
Exemplo:
Imagine que você tenha um arquivo texto(ou csv) conforme abaixo:
Japan 13may2000 8
Greece 17oct99 12
New Zealand 03feb2001 16
Brazil 28feb2001 8
Venezuela 10nov00 9
Italy 25apr2001 8
France 03jun1997 14
Switzerland 14jan2001 9
Australia 24oct98 12
Ireland 27aug2000 7
Ao ler datas, é uma boa prática de programação sempre usar o DATE9. ou MMDDYY10. informats para garantir que os dados sejam lidos corretamente. Se você usar o DATE7. ou MMDDYY8. informat, o SAS lê apenas os dois primeiros dígitos do ano. Se os dados contiverem anos de quatro dígitos, o SAS lerá o século e não o ano.
No exemplo utilizaremos o FORMAT apenas na saída do PROC PRINT para que vejam as diferenças.
SAS FORMAT: https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/leforinforref/n11m54nggvjybhn1w2a8mbczw04q.htm
Quando executarmos o código abaixo você verão na saída do PROC PRINT as diferenças de leitura no campo de data.
Código que vamos executar:
data viagemDate7;
infile 'Exemplo_datas.txt';
input Pais $ 1-11 @13 DataSaida date7. noites;
run;
proc print data=viagemDate7;
title "Leitura com Date7. e apresentando com Date7.";
format datasaida date7.;
run;
proc print data=viagemDate7;
title "Leitura com Date7. e apresentando com Date9.";
format datasaida date9.;
run;
data viagemDate9;
infile 'Exemplo_datas.txt';
input Pais $ 1-11 @13 DataSaida date9. noites;
run;
proc print data=viagemDate9;
title "Leitura com Date9. e apresentando com Date7.";
format datasaida date7.;
run;
proc print data=viagemDate9;
title "Leitura com Date9. e apresentando com Date9.";
format datasaida date9.;
run;
Saída do Código:
Leitura com Date7. e apresentando com Date7.
Obs
Pais
DataSaida
noites
1
Japan
13MAY20
0
2
Greece
17OCT99
12
3
New Zealand
03FEB20
1
4
Brazil
28FEB20
1
5
Venezuela
10NOV00
9
6
Italy
25APR20
1
7
France
03JUN19
97
8
Switzerland
14JAN20
1
9
Australia
24OCT98
12
10
Ireland
27AUG20
0
Leitura com Date7. e apresentando com Date9.
Obs
Pais
DataSaida
noites
1
Japan
13MAY2020
0
2
Greece
17OCT1999
12
3
New Zealand
03FEB2020
1
4
Brazil
28FEB2020
1
5
Venezuela
10NOV2000
9
6
Italy
25APR2020
1
7
France
03JUN2019
97
8
Switzerland
14JAN2020
1
9
Australia
24OCT1998
12
10
Ireland
27AUG2020
0
Leitura com Date9. e apresentando com Date7.
Obs
Pais
DataSaida
noites
1
Japan
13MAY00
8
2
Greece
17OCT99
12
3
New Zealand
03FEB01
16
4
Brazil
28FEB01
8
5
Venezuela
10NOV00
9
6
Italy
25APR01
8
7
France
03JUN97
14
8
Switzerland
14JAN01
9
9
Australia
24OCT98
12
10
Ireland
27AUG00
7
Leitura com Date9. e apresentando com Date9.
Obs
Pais
DataSaida
noites
1
Japan
13MAY2000
8
2
Greece
17OCT1999
12
3
New Zealand
03FEB2001
16
4
Brazil
28FEB2001
8
5
Venezuela
10NOV2000
9
6
Italy
25APR2001
8
7
France
03JUN1997
14
8
Switzerland
14JAN2001
9
9
Australia
24OCT1998
12
10
Ireland
27AUG2000
7
... View more