Combinaciones de k elementos tomados de n en n. Con SAS y con R
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:
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…