isolando la più piccola differenza di dataHo un set di dati di grandi dimensioni con una data statica su un soggetto (data della TAC del torace) e devo trovare la più piccola differenza di data e mantenere quella riga (eliminare le altre). jmp 16.2.0
Esempio sotto: voglio mantenere le righe 2 e 4 (la più piccola differenza di giorni per i soggetti 1 e 2).
soggetto ID. Data TC. data della funzionalità polmonare. differenza di giorno
1 30/8/18 29/1/18 -213
1 30/8/18 31/8/18 1
1 30/8/18 4/3/19 186
2 19/12/17 13/11/18 329
2 19/12/17 3/9/19 623
2 19/12/17 21/4/10 1385
Organizzazione dei contenutiRe: isolare la più piccola differenza di dataCiao @jsolo01 ,
Che ne dici di aggiungere una nuova colonna formula "Col Rank" per classificare la differenza di giorno in base all'ID subj.?
Quindi, puoi selezionare la riga "Col Rank" diversa da 0 ed eliminare le righe.
Per;
subj ID 1, la differenza minima del giorno è la 2a riga.
subj ID 2, la differenza minima del giorno è la 4a riga
1) Crea una nuova colonna formula: Col Rank


2) Vai su Righe > Selezione riga > Seleziona dove

3) Definisci la condizione: Col Ran non è uguale a 1 > fai clic su "Aggiungi condizione"


4) Fare clic con il pulsante destro del mouse sulle righe selezionate > Elimina righe

5) Risultato finale come di seguito

Spero che sia d'aiuto.
Se si tratta di un'analisi ripetitiva, puoi automatizzare i passaggi tramite flusso di lavoro o JSL
Re: isolare la più piccola differenza di dataEcco la mia opinione su un modo semplice per ottenere ciò che stai chiedendo; Solo una semplice sceneggiatura
Names Default To Here( 1 );
dt = Current Data Table();
dt << select where( :day difference == Col Min( :day difference, :subject ID ) );
dt << subset( selected columns( 0 ), selected rows( 1 ) );
Re: isolare la più piccola differenza di dataGiusto per estendere un po' la soluzione interattiva @WebDesignesCrow :
Se non disponi già della colonna della differenza, puoi crearla in modo interattivo (seleziona entrambe le date, fai clic con il pulsante destro del mouse sull'intestazione della colonna e trova Differenza (ordine inverso). Ciò creerà una nuova colonna in cui le differenze sono in secondi. Se vuoi vederli nei tuoi/giorni puoi fare doppio clic sulla colonna creata e modificarla secondo necessità (ad esempio aggiungere la divisione per In Days(1)) ma i secondi funzionano per questo caso

Quindi fai clic con il pulsante destro del mouse sull'intestazione di questa nuova colonna e creane una colonna con valore assoluto

Dopo aver ottenuto quella colonna, fai clic con il pulsante destro del mouse sulla colonna soggettid e rendila una colonna di raggruppamento

successivamente puoi fare clic con il pulsante destro del mouse sulla colonna della differenza di data e creare una formula di classificazione (nota il raggruppamento)

dall'ultima colonna, fai clic con il pulsante destro del mouse su uno degli "uno", seleziona le celle corrispondenti

Da qui puoi creare un sottoinsieme utilizzando le righe selezionate

OPPURE fare clic con il pulsante destro del mouse sull'elenco delle righe, invertire la selezione e, dopo l'inversione, eliminare le righe



Quindi, se è necessario ripetere l'operazione, è possibile creare un flusso di lavoro o acquisire lo script dal registro avanzato
Di seguito è riportato lo script creato dal generatore di flusso di lavoro. L'unica cosa che manca è l'apertura della tabella poiché non l'ho salvata (e alcuni nomi di colonne non sono corretti per lo stesso motivo), quindi ho aggiunto lo script di creazione della tabella (è allegato anche il flusso di lavoro).
Visualizza altro...
Names Default To Here(1);
//Custom Action - Create table 'Untitled 2'
dt = New Table("Untitled 2",
Add Rows(6),
Compress File When Saved(1),
New Column("subj", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 2, 2, 2])),
New Column("day1",
Numeric,
"Continuous",
Format("m/d/y", 12),
Input Format("m/d/y"),
Set Values([3618432000, 3618432000, 3618432000, 3596486400, 3596486400, 3596486400])
),
New Column("day2",
Numeric,
"Continuous",
Format("m/d/y", 12),
Input Format("m/d/y"),
Set Values([3600028800, 3618518400, 3634502400, 3624912000, 3650313600, 3716150400])
)
);;
//New formula column: day2-day1
Data Table("Untitled 2") << New Formula Column(
Operation(Category("Combine"), "Difference (reverse order)"),
Columns(:day1, :day2)
);
//New formula column: Abs[day2-day1]
Data Table("Untitled 2") << New Formula Column(
Operation(Category("Transform"), "Absolute Value"),
Columns(:"day2-day1"n)
);
//New formula column: Rank[Abs[day2-day1]][subj]
Data Table("Untitled 2") << New Formula Column(
Operation(Category("Distributional"), "Rank"),
Columns(:"Abs[day2-day1]"n),
Group By(:subj)
);
//Select matching cells
Data Table("Untitled 2") << Select Where(:"Rank[Abs[day2-day1]][subj]"n == 1);
//Subset data table
Data Table("Untitled 2") << Select Where(:"Rank[Abs[day2-day1]][subj]"n == 1) <<
Subset(Selected Rows(1), Selected columns only(0));