Consejos y trucos

BookmarkSubscribeRSS Feed
Tip Semanal 035: Formatos numéricos y el problema del delimitador.sas
Berenice25
SAS Employee

En el Tip 030 ya habíamos visto varios formatos de fecha. Ahora es el momento de ver algunos formatos numéricos. 

Pasaremos por formatos conocidos para después pasar a algunos... algunos... menos conocidos. 
Y también tomaremos en cuenta la diferencia que tenemos en varios países de Latinoamérica respecto del delimitador de decimales: algunos usamos el punto y otros la coma. 

Para más información sobre formatos numéricos pueden ver: 
https://documentation.sas.com/doc/es/pgmsascdc/9.4_3.5/allprodsle/syntaxByType-format.htm 
https://documentation.sas.com/doc/es/pgmsascdc/9.4_3.5/leforinforref/p1fum54c93f8r0n1wrs5mrb05nzi.ht...
https://documentation.sas.com/doc/es/pgmsascdc/9.4_3.5/leforinforref/n0sxynyp262a9yn1ckv4xmjkm8nj.ht...
https://documentation.sas.com/doc/es/pgmsascdc/9.4_3.5/leforinforref/n12v1pgo24u3fln1x1982m5xowuj.ht...

 

/****************************************/
/*										*/
/* 1. Formatos monetarios elementales 	*/
/*	  (dollar y dollarx)				*/
/*										*/
/****************************************/

/* Vamos a un ejemplo que incluya en el formato numérico el símbolo "$".	*/
/* Y, tal como dijimos, vamos a diferenciar entre el uso de el punto o la 	*/
/* coma como delimitador de decimales.										*/
/* El formato será 'dollar' y la única diferencia es la 'x' final.			*/

Data resultado_dinero;  /* con el símbolo $ y delimitador de miles */
	set test;
	keep Sales Purchases Ventas Compras;
	/* creo 2 variables nuevas para cambiar el delimitador de decimales */
	Ventas=Sales;
	Compras=Purchases;
	format 	Sales Purchases dollar10.2   /* la coma como delimitador de miles 
											y el punto como delimitador de 
											decimales */
			Ventas Compras dollarx10.2;  /* el punto como delimitador de miles 
											y la coma como delimitador de 
											decimales */
Run;




/****************************************/
/*										*/
/* 2. Formatos con delimitadores de 	*/
/*	  miles (comma y commax)			*/
/*										*/
/****************************************/

/* Este ejemplo es similar al de la situación anterior. La diferencia está  */
/* en que no utilizamos el símbolo "$".	Pero seguimos incluyendo el 		*/
/* delimitador de miles.													*/
/* Aquí el formato será 'comma' y, nuevamente, la única diferencia es la 	*/
/* 'x' final.																*/

Data resultado_miles; /* solamente con delimitador de miles */
	set test;
	keep Sales Purchases Ventas Compras;
	/* creo 2 variables nuevas para cambiar el delimitador de decimales */
	Ventas=Sales;
	Compras=Purchases;
	format 	Sales Purchases comma10.2   /* la coma como delimitador de miles */
			Ventas Compras commax10.2;  /* el punto como delimitador de miles */
Run;



/****************************************/
/*										*/
/* 3. ¿Formatos con delimitadores de 	*/
/* 	  decimales y sin delimitadores de 	*/
/* 	  miles? ¡A eso vamos!				*/
/*										*/
/****************************************/

 

A veces necesitamos utilizar un formato numérico sin delimitador de miles; solamente con el delimitador de decimales. 

Vamos a hacer un par de intentos, que nos servirán para entender un poco más sobre formatos. 

Los ejemplos tendrán varias sentencias format para que puedan ver los diferentes resultados.

/********************************************/
/* Primer intento: los formatos clásicos 	*/
/* (a la búsqueda de los formatos 'x') 		*/
/********************************************/

La primera usa un formato agregando una 'x' al final, inspirándonos en los formatos que usamos más arriba (dollarx y commax). 
En la segunda se nos ocurre utilizar el formato 'bestx' 
En la última nos damos por vencidos y reintentamos con los formatos del punto 2 (el del ejemplo anterior), tan solo para ver que no hay ninguna modificación mágica del formato.

 

Data resultado_sin_miles_01;
	set test;
	keep Sales Purchases Ventas Compras;
	Ventas=Sales;
	Compras=Purchases;
	*format Sales Purchases 10.2   /* la coma como delimitador de miles */
			Ventas Compras 10x.2;  /* ¿10x.2? ¡No existe! */
	*format Sales Purchases best10.2   /* la coma como delimitador de miles */
			Ventas Compras bestx10.2;  /* ¿bestx10.2? ¿existe? */
	*format Sales Purchases comma10.2   /* no queremos delimitador de miles */
			Ventas Compras commax10.2;  /* no queremos delimitador de miles */
Run;


/****************************************/
/* Segundo intento: buscando formatos 	*/
/* (formatos no clásicos) 				*/
/****************************************/

Por si ya lo olvidaron, les recordamos que NO queremos que aparezca el delimitador de miles. 

Esta vez vamos con 2 opciones de sentencia format:
La primera utiliza un formato que comienza con 'NL', por 'National 
Language'. Esto hace que el formato dependa de la configuración local, tal como vimos en el Tip 030. Entonces el resultado dependerá de dicha configuración. Lo que puede servirnos o no, según el contexto. 
La última de las opciones.... ¡qué mejor que verla en funcionamiento!

 

Data resultado_sin_miles_02;
	set test;
	keep Sales Purchases Ventas Compras;
	Ventas=Sales;
	Compras=Purchases;
	*format Sales Purchases 10.2   
			Ventas Compras NLBEST10.2;  /* ¡coma como separador decimal sin 
										delimitadores de miles! Decide 	
										automáticamente la cantidad	de		
										decimales*/
	*format Sales Purchases 10.2   
			Ventas Compras NUMX10.2;  /* ¡coma como separador decimal sin 
										delimitadores de miles! Con 2 decimales*/
Run;

Si revisaron el Help de SAS habrán notado que el formato 'Bestx' que utilizamos en el tercer punto no aparece en la lista de formatos. 
¡Pero el formato funciona! 
Qué extraño, ¿no les parece?

 

/*-------------------*/
/* fin del código 	 */
/*-------------------*/

sas-innovate-white.png

Missed SAS Innovate in Orlando?

Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.

 

Register now

Article Labels
Contributors