Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeCIAO,
Ho uno script che esegue alcuni calcoli, esegue alcune piattaforme ed estrae un output specifico, per poi creare una casella di controllo in una nuova finestra. Voglio fare tutto questo per ogni livello di una variabile categoriale specificata dall'utente nella mia finestra di dialogo.
Attualmente creo singoli sottoinsiemi di dati in base alla mia variabile di raggruppamento e poi eseguo un ciclo su ciascuno di questi set di dati:
dtSubset = dt << Subset( By( Eval( groupVar ) ), Linked, Selected Columns Only( 0 ), All Rows( 1 ), Invisible );
For( i = 1, i <= N Items( unique_groups ), i++,
dt_i = dtSubset[i];
...some code to do stuff
<BR />...append output as a new tab box in my window
);
Essentially all I am doing is coding up my own analysis and wanting a 'By' variable. I am wondering if there is a better or more efficient way to go about this? The main thing I want with the code is to have the output I create be specific for each level, while also still maintaining a connection to the original data table (meaning the plots in my output are interactive still).
Come puoi vedere, creo i sottoinsiemi come Invisibili e poi nel mio codice li chiudo alla fine di ogni iterazione del ciclo.
Grazie,
Roberto
Automazione e scriptingRe: Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeC'è un motivo per cui non si usa la variabile By nelle piattaforme?
Re: Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeEcco tre opzioni per creare una Tab Box da una tabella dati utilizzando le colonne di raggruppamento. Se hai JMP18+ (credo), l'ultima è sicuramente la più semplice.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using subsets
dt_subsets = dt << Subset(
By(:age),
Linked,
Selected Columns Only(0),
All Rows(1),
Invisible
);
nw = New Window("Subsets",
tb = tab box()
);
dists = {};
For Each({dt_subset}, dt_subsets,
tb << Insert(Tab Page Box(Title(dt_subset << get name),
dt_subset << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age))
);
));
);
tb << Set Selected(1);
// Using Where in platform
nw = New Window("Where",
tb = tab box()
);
groups = Associative Array(Column(dt, "age")) << get keys;
dists = {};
For Each({group}, groups,
tb << Insert(Tab Page Box(Title("age=" || Char(group)),
dist = dt << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
Where(:age == group)
);
));
(Report(dist) << Top Parent)[TextBox(1)] << Visibility("Collapse"); // to hide Where(... textbox
);
tb << Set Selected(1);
// Using By in platform
dist = dt << Distribution(
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
Re: Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeAmpliando l'esempio Per gruppo di Jarmo, ecco un esempio che crea la finestra a schede dell'output.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using By in platform
dist = dt << Distribution(Invisible,
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
// Create a new window and add tabs for each age
nw = New Window( "Tabs",
tabb = Tab Box();
);
For( i = 1, i <= N Items( dist ), i++,
display = Report( dist[i] );
theByGroup = display[Outline Box( 1 )] << get title;
tabb << append( Tab Page Box( Title( theByGroup ), display ) );
);

Re: Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeIn realtà, il motivo principale è che ho trovato più semplice scorrere i diversi livelli della mia variabile e creare ogni finestra in questo modo, per poi aggiungerla. Dato che per ogni livello eseguo calcoli per le tabelle, costruisco un grafico con Graph Builder, estraggo grafici qq dalla piattaforma Dist, estraggo il grafico dei residui studentizzati dalla piattaforma del modello di adattamento, ecc.
Re: Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeGrazie a entrambi per il vostro contributo, il codice fornito funziona perfettamente. Devo aggiungere che sto sviluppando un componente aggiuntivo piuttosto complesso che attinge da diverse piattaforme e crea anche un output innovativo. Ciò che volevo davvero era garantire che i miei grafici e le tabelle, normalmente collegati alla mia tabella dati, rimanessero tali. Volevo anche che ogni singola scheda avesse esattamente lo stesso aspetto, quindi il looping mi è sembrato una soluzione semplice.
Pensi che il modo migliore per procedere sia semplicemente usare l'opzione By in tutte le piattaforme che sto utilizzando e poi scorrere i livelli della mia variabile chiamando ogni componente usando i vari percorsi e aggiungendoli dove voglio?
Re: Creazione di script con lo stesso output per tutti i livelli di una variabile categorialeSe li aggiungi come ha dimostrato Jim, finiranno per perdere l'interattività. Subset/Where funzionano entrambi abbastanza bene, ma ci sono casi in cui non è possibile utilizzare Where con la stessa facilità, come la creazione di tabelle di riepilogo (utilizza un filtro dati locale invece del semplice Where). E con i sottoinsiemi potresti ritrovarti con molte tabelle dati da gestire, poiché potrebbero non chiudersi come previsto (alla chiusura della tabella principale). A volte potrebbe anche valere la pena considerare l'utilizzo di Local Data Filter, poiché si utilizza un filtro per più piattaforme con Data Filter Context Box.