Me gustaría plantearos un problema que me ha ocurrido recientemente con SAS. Necesitaba todas las posibles combinaciones de 9 elementos tomados de n en n. Tenia que crear un dataset con todas estas combinaciones. Antes de ponerme a programar toca buscar en Google « sas combinations » y tras un rato buscando encuentro el siguiente link. Este link contiene una macro de SAS que nos permite crear todas las combinaciones de k elementos tomados de n en n:
%macro `comb`(`dsout=_null_`,`n=`,`k=`);
%local `dsout` `n` `k` `start` `stop` `i`;
%let `start` = 1;
%let `stop` = `eval(&n. - &k.)`;
`data &dsout`;
`retain j 1`;
%do `i`=1 %to `&k`;
%let `stop`=`eval(&stop.+1)`;
do varib&i = `&start` to `&stop`;
%let `start`=`%str(%(varib&i + 1 %))`;
%end;
`output` ;
`j + 1`;
%do `i`=1 %to `&k`;
`end`;
%end;
`run`;
%mend `comb`;
Es un código bastante eficiente que, al final, es una forma de parametrizar un bucle. De todos modos roza la genialidad. Esta misma duda se planteo en la lista de R. Y me pare a pensar: ¿Cómo puede hacer esto mismo en R? Escribimos en Google «combinations R» y la segunda entrada es:
https://stat.ethz.ch/pipermail/r-help/2002-November/026716.html El paquete gregmisc tiene la funcion combinations(4, 2):
combinations(4, 2)
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 2 3
[5,] 2 4
[6,] 3 4
Es decir, solo tenemos que irnos al CRAN o poner require(gregmisc). Ahora bien, ¿que sucede si lo que deseamos es crear combinaciones de un vector de valores? Por ejemplo, si tengo 9 variables para mi modelo cual es el mejor modelo posible tomando variables de 4 en 4. Os planteo como ejercicio hacer esto. A ver si os cuesta mas con R o con SAS. Es sencillo pinchad los link…