BookmarkSubscribeRSS Feed
Berenice25
SAS Employee
/************************************/
/************************************/
/*									*/
/*   SAS - Customer Success Latam 	*/
/*									*/
/************************************/
/************************************/


/************************************/
/************************************/
/*									*/
/*      Webinar: SAS y Excel		*/
/*            23Jun2022             */
/*									*/
/************************************/
/************************************/


/************************************/
/* Expositor: Daniel Vazquez Vargas */
/************************************/


/****************************************************************/
/*	Uso de "ODS excel, "ODS html" y "ODS tagsets.excelxp"	*/
/****************************************************************/


/************************************************/
/* 	  3 ejemplos para crear fórmulas en Excel 	*/
/************************************************/



/*-------------------*/
/* inicio del código */
/*-------------------*/
 

/* Ejemplo 1: con 'ods excel' */
/* Este es un ejemplo clásico; no puede faltar */
ods excel file='g:\temp\prueba calculos en Excel 01.xlsx';

data basicDemo;
	input unidades precio;
	rowNum = strip(put(_n_ + 1, best.)); /*creamos la columna 'rownum' a partir de '_n_'*/
	Ventas_total = cats('=A', rowNum, '*B', rowNum);
	drop rowNum;
	datalines;
10 20
3 30
8 9.5
;
run;

title1 'Ejemplo 1: Multiplica columnas';
title2 '¡Usamos ODS excel!';
footnote1 'Generando fórmulas en Excel';

proc print data= basicDemo noobs;
run;

ods excel close;

title;
footnote;

ods listing;


/* Ejemplo 2: con 'ods html' */

/* Antes de comenzar con el ejemplos en sí, algo muy importante: */
/*Los distintos separadores de decimales suelen traer problemas. Si el separador de 
decimales es el punto (como en USA o en México) no debería ser un problema pasar de los 
formatos numéricos de SAS a los de Excel */ 
/* Pero, en el caso de muchos otros países de Latinoamérica (por ejemplo Colombia, 
Argentina, Chile o Brasil) el separador de decimales es la coma. Y es esta situación 
sí podría haber inconvenientes al pasar formatos numéricos de SAS a Excel */

/* Para resolver estos temas se puede usar la opción 'locale' */
options locale=es_AR;  /* cambio (por ejemplo) a Argentina */
/* Portuguese_Brazil -> pt_BR
Spanish_Argentina -> es_AR
Spanish_Bolivia -> es_BO
Spanish_Chile -> es_CL
Spanish_Colombia -> es_CO
Spanish_CostaRica -> es_CR
Spanish_DominicanRepublic -> es_DO
Spanish_Ecuador -> es_EC
Spanish_ElSalvador -> es_SV
Spanish_Guatemala -> es_GT
Spanish_Honduras -> es_HN
Spanish_Mexico -> es_MX
Spanish_Nicaragua -> es_NI
Spanish_Panama -> es_PA
Spanish_Paraguay -> es_PY
Spanish_Peru -> es_PE
Spanish_PuertoRico -> es_PR */

/* Y ahora sí podemos continuar sin conflictos entre SAS y Excel */

title1 'Ejemplo 2: División de columnas y División utilizando una sumatoria';
title2 '¡Usamos ODS html!';
footnote1 'Generando fórmulas en Excel';

data orSalesSubset;
	set sashelp.orsales;
	where quarter = '1999Q1' and product_line = 'Children';
	format quantity profit Total_Retail_Price nlnum10.2; /*los 'nl' son formatos 'national language'*/
run;

data demoFormula1;
	length rowNum $3;
	set orSalesSubset;
	rowNum = strip(put(_n_ + 1, best.));
	profit_per_unit = '=C'||strip(put((rowNum+3), best.))||'/ B'||strip(put((rowNum+3), best.));
	profit_share_of_tot = '=C'||strip(put((rowNum+3), best.))||'/ SUMA(C5:C15)'; /*cuidado: debes verificar que es 
																				también es 'SUMA' en tu país*/
	keep product_group quantity profit profit_per_unit profit_share_of_tot;
run;

ods listing close;

/* Generamos la salida a Excel, pero ¡Atención! estamos usando 'html'. Es por eso que vamos a tener
que abrir el archivo desde el Explorador de Windows */
ods html file = 'g:\temp\prueba calculos en Excel 02.xls' style=Sapphire;

proc print noobs;
	*format profit_per_unit profit_share_of_tot nlnum10.2;
run;

ods html close;

title;
footnote;

ods listing;



/* Ejemplo 3 */
/* Dar formato a las fórmulas */

/* Creamos una nueva tabla a partir de 'orSalesSubset' */
data demoFormula2;
	length rowNum $3 profit_per_unit $15 profit_share_of_tot $26;
	set orSalesSubset; /*¡ojo! Necesito esta tabla del ejemplo 2*/
	rowNum = 'F'||strip(put(_n_ + 1, best.));
	profit_per_unit = cats('=', rowNum, 'C3 / ', rowNum, 'C2');
	profit_share_of_tot = cats('=', rowNum, 'C3 / SUMA(F2C3:F12C3)'); 
	run;

ods listing close;

title1 'Ejemplo 3: Dar formato a las fórmulas';
title2 '¡Usamos ODS tagsets.excelXP!';
footnote1 'Generando fórmulas en Excel';

ods tagsets.excelXP file = 'g:\temp\prueba calculos en Excel 03.xls' 
options(EMBEDDED_TITLES='yes' EMBEDDED_FOOTNOTES='yes' FORMULAS="no" DECIMAL_SEPARATOR="," 
THOUSANDS_SEPARATOR="."); 

proc print data = demoFormula2 noobs;
	var product_group;
	var quantity;
	var profit / style={tagattr='format:Currency'};
	var profit_per_unit / style={tagattr='format:Currency'};
	var profit_share_of_tot / style={tagattr='format:Percent'};
run;

ods tagsets.excelXP close;

title;
footnote;

ods listing;


/*--------*/
/* 	fin	  */
/*--------*/

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
Discussion stats
  • 0 replies
  • 339 views
  • 0 likes
  • 1 in conversation