In una prima colonna simulo una variabile casuale per creare una popolazione (ad esempio, 10000 linee con una distribuzione normale).
Poi vorrei, in un'altra colonna, ottenere un campione casuale di dimensione n da fissare ed estrarre dalla popolazione creata nella colonna precedente. La soluzione migliore sarebbe quella di ottenere più campioni contemporaneamente, in colonne giustapposte.
Per vostra informazione, ho scoperto JMP solo da poche settimane (lavoro con Minitab da anni) e non ho ancora trovato la soluzione da solo, a parte il campionamento durante la creazione di un grafico.
Grazie in anticipo.
Esistono diversi modi per farlo.
Il modo più semplice è utilizzare la funzionalità integrata della piattaforma Subset
Tabelle=>Sottoinsieme
Data una tabella con una colonna di dati con 1000 righe

Le tabelle => Sottoinsieme consentono di creare un campione casuale di una determinata percentuale o di una determinata dimensione del campione

Che ti darà una nuova tabella con 100 righe

è quindi semplice unire questa tabella con la tabella originale utilizzando
Tabelle=>Unisciti

Che ti darà ciò che hai chiesto

Il problema principale di questo approccio è che viola in qualche modo i presupposti di una tabella dati JMP.
Un altro approccio sarebbe quello di usare una formula di colonna. La formula che ho elaborato produce un campione casuale, ma anziché posizionare i dati selezionati nelle prime 100 righe, posiziona i valori nella riga da cui provengono i dati selezionati.
Ecco la formula
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,
.
);
Che produce

Ora, se si sposta la generazione del campione su JSL, diventa abbastanza facile creare tutti i campioni necessari
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]
);
);
Che crea

Con una piccola modifica, la generazione di campioni casuali può essere un campionamento senza sostituzione
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]
);
);
