/************************************/
/************************************/
/* */
/* 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 */
/*--------*/