¿Por qué? Porque SUBSTR espera una cadena de caracteres, y no un número. Además, intentar comparar el resultado (cadena) con un número (2019) crea una incompatibilidad de tipo.
Aquí hay tres métodos para resolver este problema, desde el más "matemático" hasta la "mejor práctica".
Si su columna es numérica, la solución más eficiente suele ser permanecer en el dominio numérico. En lugar de intentar cortar el texto, utilice las matemáticas.
Imaginemos una variable date_id que contiene 20190901. Para recuperar los 4 primeros dígitos (el año), basta con dividir por 10 000 y conservar solo la parte entera.
proc sql;
select count(receipt_number)
from ma_table
where floor(date_id / 10000) = 2019;
quit;
1
PROC SQL;
2
select count(receipt_number)
3
from ma_table
4
where floor(date_id / 10000) = 2019;
5
QUIT;
Aquí, 20190901 / 10000 da 2019.0901. La función FLOOR redondea al entero inferior, es decir, 2019.
Si necesitara extraer una parte en medio del número, la lógica se volvería más compleja (una mezcla de restas y divisiones), lo que hace que este método sea menos legible para extracciones complejas.
2. El método de conversión (Tipado explícito)
Si insiste en tratar la variable como texto, debe convertirla explícitamente. No basta con usar PUT, a menudo hay que gestionar los espacios que pueden insertarse durante la conversión.
Sin embargo, este método suele ser más verboso y propenso a errores de comparación (comparar una cadena '2019' con el número 2019).
3. La "Mejor Práctica": Convertir a una fecha SAS real
proc sql;
/* Création d'une date temporaire pour le filtre */
select count(receipt_number)
from ma_table
where year(input(put(date_id, 8.), yymmdd8.)) = 2019;
quit;
1
PROC SQL;
2
/* Création d'une date temporaire pour le filtre */
3
select count(receipt_number)
4
from ma_table
5
where year(INPUT(put(date_id, 8.), yymmdd8.)) = 2019;
6
QUIT;
Ventajas:
Legibilidad: Se entiende inmediatamente que se está filtrando por el año.
Flexibilidad: Puede cambiar fácilmente para filtrar por el mes (MONTH() = 9) o el día, sin tener que rehacer cálculos matemáticos complejos.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.