Comenzaremos una serie de consejos sobre la manipulación de fechas con SAS. Y a partir de ahí, empecemos desde el principio.
¿Cómo almacena SAS las fechas?
En SAS, cada fecha es un número único en una recta numérica. Las fechas anteriores al 1 de enero de 1960 son números negativos; los posteriores al 1 de enero de 1960 son positivos. Dado que los valores de fecha de SAS son variables numéricas, puede ordenarlos fácilmente, determinar intervalos de tiempo y usar fechas como constantes, como argumentos en funciones de SAS o en cálculos.
Fuente https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/basess/p1m2pok52uqfc3n16ebk28rrm7pl.htm
¿Cómo encontramos las fechas que se mantienen?
Encontramos fechas en las formas y formatos más variados posibles y de las maneras más creativas posibles, como en los ejemplos a continuación (pensando en el 3 de abril de 2023):
3/4/2023, 4/3/2023, 3ABR2023, 030423, 04032023, 03ABR2023, 20230403, etc.
¿Cómo lee SAS estas fechas?
SAS o el lenguaje SAS utiliza INFORMATs para facilitar su interacción no solo con fechas, sino también con otro tipo de datos para su lectura. Nos centraremos en esta serie solo en la lectura de datos de tipo DATA, siéntase libre de explorar todas las posibilidades en el siguiente enlace:
Fuente
https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/leforinforref/n0cq8eha2o93mdn1lg8n5ursmkxm.htm
Ejemplo:
Imagine que tiene un archivo de texto (o csv) como se muestra a continuación:
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
Al leer fechas, es una buena práctica de programación usar siempre DATE9. o MMDDAA10. informats para asegurar que los datos se leen correctamente. Si usa DATE7. o MMDDAA8. informat, SAS solo lee los dos primeros dígitos del año. Si los datos contienen años de cuatro dígitos, SAS lee el siglo y no el año.
En el ejemplo, usaremos FORMATO solo en la salida de PROC PRINT para que pueda ver las diferencias.
Fuente
https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/leforinforref/n11m54nggvjybhn1w2a8mbczw04q.htm
Cuando ejecutemos el código a continuación, verá las diferencias en la lectura del campo de fecha en la salida PROC PRINT.
Código que ejecutaremos:
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;
Salida del código
Lectura con Date 7. y presentando con Date7.
Obs
País
DateSalida
Nota
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
Lectura con Date7. y presentando con Date9.
Obs
País
DateSalida
Nota
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
Lectura con Date9. y presentando con Date7.
Obs
País
DateSalida
Notas
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
Lectura con Date9. y presentando con Data9.
Obs
País
DateSalida
Notas
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