En una primera columna simulo una variable aleatoria para crear una población (por ejemplo, 10000 líneas con una distribución normal).
Luego me gustaría, en otra columna obtener una muestra aleatoria de tamaño n a fijar y extraer de la población creada en la columna anterior. Lo mejor sería obtener varias muestras simultáneamente en columnas yuxtapuestas.
Para su información, recién hace unas semanas que descubrí JMP (he estado trabajando con Minitab durante años), no he encontrado la solución por mi cuenta, excepto el muestreo al crear un gráfico.
Gracias de antemano.
Hay varias maneras de hacer esto.
Lo más sencillo es utilizar la capacidad incorporada de la plataforma Subset
Tablas=>Subconjunto
Dada una tabla con una columna de datos con 1000 filas

Las Tablas=>Subconjunto le permiten crear una muestra aleatoria de un porcentaje determinado o de un tamaño de muestra determinado.

Lo que le dará una nueva tabla con 100 filas.

Entonces es sencillo unir esta tabla con la tabla original usando
Tablas=>Unir

Que te dará lo que pediste

El principal problema con este enfoque es que viola en cierta medida los supuestos de una tabla de datos JMP.
Otro enfoque sería utilizar una fórmula de columna. La fórmula que se me ocurrió produce una muestra aleatoria, pero en lugar de colocar los datos seleccionados en las primeras 100 filas, coloca los valores en la fila de la que provienen los datos seleccionados.
Aquí está la fórmula
As Constant(
rowCount = N Rows( Current Data Table() );
sampleMatrix = [];
For( i = 1, i <= 100, i++,
found = 0;
While( found == 0,
row = Random Integer( 1, rowCount );
If( N Rows( Loc( sampleMatrix, row ) ) == 0,
found = 1;
sampleMatrix = sampleMatrix || Matrix( row );
);
);
);
);
If( N Cols( Loc( sampleMatrix, Row() ) ) != 0,
:Column 1,
.
);
Lo cual produce

Ahora, si uno traslada la generación de muestras a JSL, se vuelve una tarea bastante fácil crear tantas muestras como sea necesario.
Names Default To Here( 1 );
dt = Current Data Table();
rowCount = N Rows( dt );
// Create 5 Random Samples of 100
For( k = 1, k <= 5, k++,
dt << New Column( "Random" || Char( k ) );
sampleMatrix = [];
For( i = 1, i <= 100, i++,
found = 0;
While( found == 0,
row = Random Integer( 1, rowCount );
If( N Rows( Loc( sampleMatrix, row ) ) == 0,
found = 1;
sampleMatrix = sampleMatrix || Matrix( row );
);
);
);
// Write the values to the new column
For Each( {row}, sampleMatrix,
Column( "Random" || Char( k ) )[row] = :Column 1[row]
);
);
Lo cual crea

Con una pequeña modificación, la generación de muestras aleatorias puede ser un muestreo sin reemplazo.
Names Default To Here( 1 );
dt = Current Data Table();
rowCount = N Rows( dt );
masterSampleMatrix = [];
// Create 5 Random Samples of 100
For( k = 1, k <= 5, k++,
dt << New Column( "Random" || Char( k ) );
sampleMatrix = [];
For( i = 1, i <= 100, i++,
found = 0;
While( found == 0,
row = Random Integer( 1, rowCount );
If( N Rows( Loc( masterSampleMatrix, row ) ) == 0,
found = 1;
sampleMatrix = sampleMatrix || Matrix( row );
masterSampleMatrix = masterSampleMatrix || Matrix( row );
);
);
);
// Write the values to the new column
For Each( {row}, sampleMatrix,
Column( "Random" || Char( k ) )[row] = :Column 1[row]
);
);
