Saltar al contenido

Macro para aleatorizar números de una columna con sucesiones de cuatro dígitos


Recommended Posts

publicado

Hola de nuevo a toda la comunidad,

Recientemente me ayudasteis con una estupenda macro pero me encuentro ante un nuevo escollo. Tengo una base de datos con unas 2049 observaciones donde la primera columna refleja individuos y tiene una estrucutra tetranómica. Es decir, para cada sujeto dispongo de cuatro observaciones correspondientes a cuatro elecciones. La cuestión es que esas cuatro elecciones, pertenecientes a la columna ELE, están ordenadas siempre de 1 hasta 4 y lo que pretendo es dentro de cada sujeto (columna 1, con cuatro observaciones) los número de 1 a 4 se distribuyan aleatoriamente, por supuesto, arrastrando toda la observación.

Es decir a modo de ejemplo:

[TABLE=class: MsoNormalTable, width: 375]

[TR]

[TD=colspan: 3] Datos originales

[/TD]

[TD=colspan: 3] Resultados esperado[/TD]

[/TR]

[TR]

[TD] Inviduo[/TD]

[TD] ELE

[/TD]

[TD] Resto de Variables[/TD]

[TD] Individuo[/TD]

[TD] ELE

[/TD]

[TD] Resto de variables[/TD]

[/TR]

[TR]

[TD] 1[/TD]

[TD] 1

[/TD]

[TD]0

[/TD]

[TD] 1

[/TD]

[TD] 2

[/TD]

[TD] 1

[/TD]

[/TR]

[TR]

[TD] 1

[/TD]

[TD] 2

[/TD]

[TD] 1

[/TD]

[TD] 1[/TD]

[TD] 3

[/TD]

[TD] -1

[/TD]

[/TR]

[TR]

[TD] 1

[/TD]

[TD] 3[/TD]

[TD] -1

[/TD]

[TD] 1[/TD]

[TD] 4

[/TD]

[TD] -1

[/TD]

[/TR]

[TR]

[TD] 1

[/TD]

[TD] 4[/TD]

[TD] -1

[/TD]

[TD] 1

[/TD]

[TD] 1

[/TD]

[TD]0

[/TD]

[/TR]

[TR]

[TD] 2[/TD]

[TD] 1[/TD]

[TD] 1

[/TD]

[TD] 2[/TD]

[TD] 3

[/TD]

[TD] -1

[/TD]

[/TR]

[TR]

[TD] 2[/TD]

[TD] 2[/TD]

[TD]0

[/TD]

[TD] 2[/TD]

[TD] 4

[/TD]

[TD]0

[/TD]

[/TR]

[TR]

[TD] 2[/TD]

[TD] 3[/TD]

[TD] -1

[/TD]

[TD] 2[/TD]

[TD] 1

[/TD]

[TD] 1

[/TD]

[/TR]

[TR]

[TD] 2[/TD]

[TD] 4[/TD]

[TD]0

[/TD]

[TD] 2

[/TD]

[TD] 2

[/TD]

[TD]0

[/TD]

[/TR]

[/TABLE]

Os adjunto ejemplo de la base de datos

Gracias por adelantado

Estupenda comunidad

Saludos

eje_para_ayuda_excel.xls

publicado
Intenta con la funcion aleatorio.

Hola Armando gracias por tu respuesta pero no acabo de entender como la función aleatorio puede ayudarme ya que debo aleatorizar entre 1 y 4 dentro de cada individuo. Es decir, cada invividuo tiene ordenada la columna ELE siempre de 1 a 4 y yo debo especificar que esa ordenación sea aleatoria por individuo (por ejemplo, 1324; 1243;3214;4132...) y que, por supuesto, se traslade toda la observación a su nueva posición en función del orden que se le asigne.

Te agradecería infinitamente si puedes concretarme un poco más tu idea

Mil gracias de antemano

Saludos

publicado

Se aplicaria por cada grupo de 4, puede usarse una columna auxiliar temporal.

Dependiendo del numero de registros puede ser manual o con macro.

Si es con macro lo hariamos con areas.

Regresare mas tarde por si necesitas que prepare la macro, depende de la cantidad de registros.

publicado
Se aplicaria por cada grupo de 4, puede usarse una columna auxiliar temporal.

Dependiendo del numero de registros puede ser manual o con macro.

Si es con macro lo hariamos con areas.

Regresare mas tarde por si necesitas que prepare la macro, depende de la cantidad de registros.

Hola de nuevo Armando se trata de 2048 registros correspondientes a 512 individuos (512*4). Si puedes echarme una mano te estaría muy agradecido. Manualmente creo que sería muy complicado. Por otra parte, la fórmula aleatorio parece que funciona con repeticiones... yo necesitaría una fórmula aleatoria para números entre 1 y 4 sin repeticiones y por individuo cada cuatro celdas. Si es necesario subo la base de datos original en lugar del recorte que he subido con cuatro observaciones.

Saludos

Gracias de antemano

publicado

Hola Armando,

En primer lugar muchas gracias por tu estupendo trabajo. En segundo lugar, tengo alguna duda:

1. Entiendo que el orden para aplicar las macros sería 1) ELE 2) Rnd 3) xXArea y por último 4) Blanks.

En mi caso, suponiendo que el orden de las macros sea este (que parece lógico) el comando blanks no me limpia todas las observaciones que se intercalan y a partir de la 1642 se queda intercalado un valor en la primera columna RND que se crea. Como ya no son muchas las puedo eliminar simplemente a mano pero lo comento por si he hecho algo mal. Lo único que he modificado es la macro Blanks consignando "A2:A2766".

Mil gracias

Excelente trabajo

Saludos

Mil gracias

Un trabajo muy profesional

Estupenda comunidad ya que lo mejor son los usuarios como Armando

publicado

Hola de nuevo Armando... lo había imaginado pero me ha confundido que al ejecutar la macro ELE funciona bien aleatorizando y eliminando las filas en blanco hasta la fila 1642, justo en el individuo 412 donde empieza a insertar una fila en blanco hasta el final. En cualquier caso, si me confirmas que no hay problema y no afecta a la aleatorización con la macro blanks fácilmente elimino las fials en blanco a partir de la linea 1642.

Mil gracias de nuevo

Estupenda comunidad

Abrazo

publicado
Solo viendo el libro exacto podria responder.

Hola de nuevo Armando, he comprobado indirectamente los resultados y parece que no hay ningún problema. En cualquier caso, te adjunto un fichero con 2049 observaciones para que veas el efecto que te comentaba en el anterior post.

Saludos

Mil gracias

Abrazo

prueba.zip

publicado
Como no viene el codigo en tu libro, inserte el mio sin ajustar rangos, corre normal asi que no logre ver el problema que mencionas.

Hola de nuevo Armando te adjunto la base de datos a la que ejecuto tu macro ELE... como puedes ver a patir de la la fila 1642 inserta un espacio en blanco cada cuatro observaciones... Para eliminarla simplemente aplico tu macro blanks pero quería cerciorarme que ese inconveniente no altera la aleatorización y el resultado final.

Mil gracias

Saludos

prueba.zip

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.