/* --------------------------------------------------------- Elaboración de tablas en LaTeX Jorge Ortiz P. - Leonardo Bautista S. Febrero de 2006 --------------------------------------------------------- */ options ps = 5000 nosource nonotes nodate nonumber nocenter; title; /* ----------------- ARCHIVOS DE DATOS Y ARCHIVOS AUXILIARES */ /* TABLAS contiene las tablas que se incluyen en el informe. NTabla es uno de los números de tabla del archivo de estimaciones (estimacion) N_Titulo indica el título escogido para la tabla (del archivo titulos) NDominio indica el campo que define los dominios. Debe ser un valor de Ncampo en la tabla campos. N_Encabezado indica el encabezado para las filas de la tabla. Debe ser un valor de Nencabezado de la tabla encabezados. N_Nota es el número de la nota que se incluye al pie de la tabla. Toma valores de la tabla Notas. */ data tablas; input NTabla N_Titulo NDominio N_Encabezado N_Nota; cards; 16 1 51 1 2 17 2 51 2 2 ; /* ----------------------------------- TÍTULOS para las tablas */ data titulos; input NTitulo Titulo $ 4-66; cards; 1 Gastos semanales por área de estudio según tipo de gasto % 2 Ingresos mensuales por área de estudio según fuente de ingreso % ; /* ----------------- ENCABEZADOS para las filas de la tabla */ data encabezados; input Nencabezado Texto $ 6-40; cards; 1 Tipo de gasto % 2 Fuente de ingreso % ; /* ----------------------------------- NOTAS al pie de tabla */ data Notas; input NNota Nota $ 6-55; cards; 1 Fuente: Encuesta 2006 de bienestar estudiantil. % 2 Datos en millones de pesos. % ; /* ROTULOS asigna los textos para los códigos de los campos categóricos de la tabla de datos. Por ejemplo, un campo con TipoRotulo = 2 toma los valores -1 (Universidad), 1 (Ingeniería), 2 (C. Salud) o 3 (Artes).*/ data rotulos; input tipo valor texto $ 11-30; cards; 0 0 % 2 -1 Universidad % 2 1 Ingeniería % 2 2 C. de la salud % 2 3 Artes % ; /* Información sobre los campos de la tabla de datos. TipoRotulo debe coincidir con tipo en la tabla rotulos donde se asignan los textos correspondientes a los valores posibles de cada campo. */ data campos; input Ncampo TipoRotulo NombreCampo $ 11-50; cards; 41 0 Total gasto semanal % 42 0 Alimentación % 43 0 Transporte % 44 0 Fotocopias y similares % 45 0 Otros gastos % 46 0 Total ingresos del mes % 47 0 Ingresos de trabajo % 48 0 Préstamos % 49 0 Transferencias familiares % 50 0 Otros ingresos % 51 2 Área de estudio % ; /* Estimacion. Las líneas con el mismo valor de N_Tabla contienen las estimaciones tt t1 t2 t3 con coeficientes de variación ct c1 c2 c3 para cada campo con código dado por N_campo. */ data estimacion; input N_Tabla N_campo tt t1 t2 t3 ct c1 c2 c3; cards; 16 41 1295 266 431 597 2.4 9.1 9.0 9.6 16 42 477 149 168 160 1.5 9.4 9.2 9.8 16 43 95 27 33 35 2.2 9.8 9.5 10.1 16 44 62 16 22 24 1.8 9.4 9.1 9.7 16 45 660 74 208 378 4.0 8.9 9.1 9.6 17 46 5525 1147 1843 2535 2.4 9.1 9.0 9.6 17 47 246 84 95 66 11.1 21.8 19.9 21.9 17 48 83 23 28 32 15.7 31.2 28.3 27.0 17 49 5140 1033 1705 2402 2.5 9.2 9.1 9.6 17 50 55 5 14 35 81.8 76.3 55.1 52.6 ; /* ----------------------------------------------------- INSTRUCCIONES PARA GENERAR EL CÓDIGO FUENTE LATEX ----------------------------------------------------- El ancho del texto (\textwidth) se puede modificar. está para 125mm. De ellos, en \begin{tabular}{p{44mm}} se utilizan 44mm y en el encabezado de las columnas de los dominios (ver más adelante en SQL) se utilizan 4*19+5 mm = 73mm (ver \multicolumn{1}{p{19mm}}). Se pueden modificar estos valores, manteniendo su total dentro de los 125mm del ancho del texto, para adaptar la presentación de los valores en la tabla LaTeX. */ data latex; input Lugar Posicion Texto $ 7-60; datalines; 1 1 \documentclass[10pt,twoside]{book} % 1 2 \usepackage[english,spanish]{babel} % 1 3 \usepackage[latin1]{inputenc} % 1 4 \usepackage{latexsym} % 1 5 \usepackage{amsmath,amssymb,amsfonts} % 1 6 \usepackage[dvips]{graphicx} % 1 7 \usepackage{enumerate} % 1 8 \usepackage{array} % 1 9 \setcounter{MaxMatrixCols}{15} % 1 11 \setlength{\textwidth}{125mm} % 1 12 \setlength{\textheight}{195mm} % 1 13 \setlength{\marginparwidth}{2mm} % 1 14 \setlength{\headsep}{6mm} % 1 15 \setlength{\oddsidemargin}{12mm} % 1 16 \setlength{\evensidemargin}{12mm} % 1 17 \begin{document} % 1 18 \renewcommand{\arraystretch}{1.2} % 1 19 \renewcommand{\tablename}{Tabla} % 1 20 \renewcommand{\tabcolsep}{0.7mm} % 1 21 \clearpage % 2 1 \begin{table} % 2 2 \begin{center} % 2 3 \caption{ % 3 1 } \vspace{2mm} % 3 2 \begin{tabular}{p{34mm}rrrr} % 3 3 & & \multicolumn{3}{c}{ % 4 1 } \\ % 4 2 \cline{3-5} % 5 1 \\ \hline % 6 1 \hline % 6 2 \end{tabular} % 6 3 \end{center} % 6 4 \end{table} % 9 2 \clearpage % 9 3 \end{document} % ; run; /* ----- Procedimiento para generar el código fuente LaTeX */ proc sql; create table CuerpoTabla( ntabla numeric(9,1), lugar numeric(9,1), posicion numeric(9,1), texto char(500)); /* -------------- Tabla como objeto flotante: \begin{table} */ insert into CuerpoTabla select ntabla, lugar, posicion, trim(latex.texto) as texto from tablas, latex where lugar = 2; /* ------------------- Título de la tabla: \caption{titulo} */ insert into CuerpoTabla select ntabla, 2.5 as lugar, 1 as posicion, trim(titulo) as texto from titulos, tablas where titulos.ntitulo = tablas.n_titulo; /* -------------------- Inicio de la tabla: \begin{tabular} */ insert into CuerpoTabla select ntabla, lugar, posicion, trim(latex.texto) as texto from tablas, latex where lugar = 3; /* --------------- Nombre del campo que define los dominios */ insert into CuerpoTabla select ntabla, 3.5 as lugar, 1 as posicion, trim(nombrecampo) as texto from tablas, campos where tablas.ndominio = campos.ncampo; /* - Línea que separa los encabezados de columnas de dominios */ insert into CuerpoTabla select ntabla, lugar, posicion, trim(latex.texto) as texto from tablas, latex where lugar = 4; /* ------------------------------ Encabezado para las filas */ insert into CuerpoTabla select ntabla, 4.1 as lugar, 1 as posicion, trim(encabezados.texto) as texto from tablas, encabezados where tablas.N_encabezado = encabezados.Nencabezado; /* ------------ Encabezado de las columnas de los dominios */ insert into CuerpoTabla select ntabla, 4.5 as lugar, valor as posicion, '& \multicolumn{1}{p{17.7mm}}{\vspace{-6mm} \flushright ' || trim(rotulos.texto) || '} %' as texto from tablas, campos, rotulos where ndominio = ncampo and tiporotulo = tipo; /* ----------- Línea de separación del cuerpo de la tabla */ insert into CuerpoTabla select ntabla, lugar, posicion, trim(latex.texto) as texto from tablas, latex where lugar = 5; /* ------------------------------------ Cuerpo de la tabla */ insert into CuerpoTabla select ntabla, 5.5 as lugar, estimacion.N_campo as posicion, trim(nombrecampo) || ' & ' || put(tt, 9.0) || ' & ' || put(t1, 9.0) || ' & ' || put(t2, 9.0) || ' & ' || put(t3, 9.0) || ' \\ %' as texto from tablas, campos, estimacion where estimacion.n_tabla = tablas.ntabla and estimacion.n_campo = campos.ncampo; insert into CuerpoTabla select ntabla, 5.5 as lugar, estimacion.N_campo + 0.5 as posicion, '\quad \textit{(cve\%)}' || ' & \textit{' || put(ct, 9.1) || '} & \textit{' || put(c1, 9.1) || '} & \textit{' || put(c2, 9.1) || '} & \textit{' || put(c3, 9.1) || '} \\ %' as texto from tablas, campos, estimacion where estimacion.n_tabla = tablas.ntabla and estimacion.n_campo = campos.ncampo; /* ------------------------------- Notas al pie de la tabla */ insert into CuerpoTabla select ntabla, 6 as lugar, 1.1 as posicion, '\multicolumn{5}{p{90mm}}{' || trim(Nota) || '} %' as texto from tablas, notas where tablas.n_nota = notas.nnota; /* ------------ Final de la tabla (\end{tabular}\end{table} */ insert into CuerpoTabla select ntabla, lugar, posicion, trim(latex.texto) as texto from tablas, latex where lugar = 6; /* ------------------ Reordenamiento de las líneas producidas */ create table salida as select ntabla, lugar, posicion, texto from CuerpoTabla order by ntabla, lugar, posicion; /* ---------------------------- Generación del archivo LaTeX */ create table Informe(texto char(500)); /* ---------------------------- Preámbulo del documento LaTeX */ insert into Informe select trim(texto) from latex where lugar = 1; /* -------------------------------------------------- Tablas */ insert into Informe select trim(texto) from salida; /* --------------------------------------- Fin del documento */ insert into Informe select trim(latex.texto) from latex where lugar = 9; quit; /* Informe.tex es el archivo con el texto LaTeX para ser compilado. La primera línea contiene la palabra "texto" y se debe borrar antes de la compilación. Modifique la carpeta donde va a quedar grabado. */ PROC EXPORT DATA= Work.Informe OUTFILE= "C:\Rev\V29_1\OrtizBautista\Informe.tex" DBMS=TAB REPLACE; RUN; /* ------------------------------------------------------- FIN DEL PROGRAMA ------------------------------------------------------- */