Come traspongo i dati dal formato lungo a quello largo?Sono un nuovo utente JMP.
I miei dati sono attualmente in formato lungo. In altre parole, i soggetti hanno più righe di dati ciascuno. Tuttavia, è necessario che i dati siano in formato ampio per l'analisi di sopravvivenza: 1 riga di dati per soggetto. Quando provo a utilizzare Transpose, JMP mi dice "Impossibile trasporre. Le colonne di dati hanno tipi di dati diversi". Le variabili sono un mix di continua e nominale. Quindi, come dovrei farlo? Sono stato in grado di convertire un set di dati diverso da ampio a lungo senza difficoltà, ma non riesco a fare il contrario.
I dati attuali sono impostati in questo modo (dati falsi):
ID Var1 Var2 Risultato
001 1 1 0
001 1 1 0
001 1 0 1
002 0 1 0
002 0 1 1
003 1 1 0
Lo voglio così:
ID Var1_ora1 Var2_ora1 Var1_ora2 Var2_ora2.... Risultato_timex
001 1 1 1 1 1
002 0 1 0 1 1
003 1 1 . . 0
Grazie!
Ri: Come trasporre i dati dal formato lungo a quello largo?Grazie, Jeff! Ha funzionato!Ri: Come trasporre i dati dal formato lungo a quello largo?@ron_horne ha la soluzione giusta ma forse alcune immagini aiuteranno.
Tabelle -> Dividi riorganizzerà i dati nel modo desiderato ma richiede una colonna che identifichi le nuove colonne. Nel tuo caso desideri creare colonne per ogni riga all'interno dell'ID, quindi hai bisogno di una colonna che conteggi le righe all'interno dell'ID.@ron_horne chiamato questa colonna Indice .
Dovrai anche assicurarti che i tuoi dati siano ordinati per ID affinché funzioni.
Ecco i dati che hai presentato nel tuo primo post sotto forma di tabella dati JMP.

A questi dati bisogna aggiungere il Indice colonna.@ron_horne ha utilizzato una formula diversa per la sua colonna Indice, ma mi piace qualcosa di un po' più semplice.

La formula sopra è:
If( :ID != Lag( :ID, 1 ), 1, Lag( :Index, 1 ) + 1)
In prosa questo dice che se il valore ID nella riga corrente non è lo stesso dell'ID nella riga precedente (cioè Ritardo ( :ID, 1) ) quindi inserisci un 1 in Indice colonna, altrimenti prendi il valore di Indice colonna dalla riga precedente (es Ritardo (:Indice, 1) )
Come puoi vedere, il Indice colonna nella tabella dati ora conta le righe all'interno ID .

Ora possiamo usare Tabelle->Dividi per dividere il tuo Var1 , Var2 E Risultato colonne di Indice e raggruppare le righe per ID .

Questo ti darà questa tabella di dati, che penso sia ciò che desideri. Ha nuove colonne per ogni riga all'interno dell'ID e una riga per ID.

Potrebbe essere più semplice vedere un esempio più semplice in cui non è necessario creare la colonna Dividi per. Ecco un video che lo mostra.
Fammi sapere se ho mancato il bersaglio o se sei ancora confuso.
Ri: Come trasporre i dati dal formato lungo a quello largo?Ultima possibilità,
1) il primo comando crea semplicemente un'origine dati originale in formato lungo.
2) il secondo comando introduce per ogni ID un indice per il numero dell'evento. non è necessario che il numero di eventi sia uguale per ciascun ID. ma, se alcuni ID hanno meno eventi, avranno valori mancanti nel formato tabella ampia.
3) il terzo comando sfrutta le colonne indice e ID per dividere la tabella come richiesto. una colonna per ogni evento e variabile e ogni riga rappresenta un solo ID.
sui tuoi dati devi solo eseguire gli ultimi due comandi.
names default to here(1);
// source data table
dt = New Table( "Long",
Add Rows( 7 ),
New Column( "ID",
Numeric,
Continuous,
Format( "Best", 5 ),
Set Values( [1, 1, 1, 2, 2, 3, 3] )
),
New Column( "Var1",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 1, 0, 0, 1, 1] )
),
New Column( "Var2",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 0, 1, 1, 1, 0] )
),
New Column( "Outcome",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [0, 0, 1, 1, 1, 0, 0] )
)
);
// add index column for spliting - no need to sort the table first
dt << new column ("index", formula(Sum( :ID[Index( 1, Row() )] == :ID ) ) );
// now split by index and group by ID
dt << Split(
Split By( :index ),
Split( :Var1, :Var2, :Outcome ),
Group( :ID ),
Output Table( "Wide" )
);
Ri: Come trasporre i dati dal formato lungo a quello largo?Questo codice mi ha dato 2 tabelle. Il primo si chiamava "Sorgente" e aveva solo 10 righe di dati e 5 colonne. La colonna ID va da 1 a 4 (non i miei ID) e l'ID appare su 3 righe. Non so davvero cosa avrebbe dovuto fare. Tutti i dati sono binari, anche la mia data vars. La seconda tabella "senza titolo" aveva 4 righe di dati e 4 colonne. L'ID va da 1 a 4 lungo le righe e le colonne sono tutte etichettate come mancanti.
Non penso che questo stia facendo quello che voglio.
Ri: Come trasporre i dati dal formato lungo a quello largo?se hai eseguito l'intero script così com'è e il risultato è quello che stai cercando, puoi riprodurlo sul tuo set di dati con pochi clic.
1) aggiungi una nuova colonna e chiamala "indice".
2) imposta la sua formula come segue: Sum( :ID[Index( 1, Row() )] == :ID )
3) Tabelle >> Dividi e riempile così.

fai clic su OK e dovresti aver finito.
Migliore,
Ron
Ri: Come trasporre i dati dal formato lungo a quello largo?OK, sono nuovo in JMP e non ho mai usato JSL, anche se ho programmato molto in SPSS, SAS e pochi altri. Non sto seguendo affatto lo scripting in questo esempio, in particolare i "valori impostati". Penso che il prossimo blocco di comandi stia cercando di creare nuove variabili di indice per il raggruppamento prima della divisione.
Ho creato alcune variabili quando passavo da ampio a lungo in un altro set di dati, ma in quel caso ogni soggetto aveva lo stesso numero di osservazioni.
Ri: Come trasporre i dati dal formato lungo a quello largo?Ci scusiamo per non aver ricontrollato prima.
Prova quanto segue
i nomi sono predefiniti qui ( 1 ) ;
// tabella dei dati di origine
dt = Nuova tabella ( "fonte",
Aggiungi righe ( 10 ) ,
Nuova colonna ( "ID ",
Numerico,
Continuo,
Formato ( "Migliore", 5 ) ,
Imposta valori ( [ 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 4 ] )
) ,
Nuova colonna ( "Var1 ",
Numerico,
Continuo,
Formato ( "Migliore", 12 ) ,
Imposta valori ( [ 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 ] )
) ,
Nuova colonna ( "Var2",
Numerico,
Continuo,
Formato ( "Migliore", 12 ) ,
Imposta valori ( [ 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 ] )
) ,
Nuova colonna ( "Risultato",
Numerico,
Continuo,
Formato ( "Migliore", 12 ) ,
Imposta valori ( [ 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 ] )
)
) ;
// aggiunge la colonna dell'indice per la suddivisione: non è necessario prima ordinare la tabella
dt << nuova colonna ( "indice", formula ( Somma ( :ID [ Indice ( 1 , Riga () )] == :ID ) ) ) ;
// ora diviso per indice e gruppo per ID
dt << Diviso (
Diviso per ( :indice ) ,
Diviso ( :Var1, :Var2, :Risultato ) ,
Gruppo ( :ID )
) ;
Ri: Come trasporre i dati dal formato lungo a quello largo?Non sono sicuro di cosa sta succedendo allora. I dati sono ordinati per ID. Quando divido per ID e utilizzo le mie variabili come "colonne divise", mi ritrovo con 14 righe di dati e una colonna per ciascuna combinazione ID/variabile.
Sto cercando di ottenere:
ID visita1 visita 2 .... visita13 esito1 esito2 ... esito 13
001 13/9 20/10 ... 2/3 0 0 ... 1
002 7/04 8/12 ... 12/5 0 1 ... 1
Quello che ottengo è
Data1-ID001 Data1-ID002
Linea 1 13/9 04/7
Linea2 20/10 12/8
Grazie,
Joe
Ri: Come trasporre i dati dal formato lungo a quello largo?
Spiacenti... Penso che tu possa risolvere il problema se usi il Gruppo e inserisci lì anche la colonna ID
Se i tuoi dati sono ordinati per ID, (tutti i dati per un determinato ID sono insieme). Se non sono ordinati, vai su Tabelle==>Ordina e ordina i dati per ID. Quindi selezionandola come colonna "Dividi per" e Var1, Var2, Risultato come "Colonne divise" otterrai una tabella di dati con una riga per valore della colonna Dividi per, quindi otterrai Var1 001, Var1 002 ......Var1 013, Var2 001, Var2 002.......Var2 013, Risultato 001, Risultato 002......Risultato 013.
Dato che puoi avere fino a 13 livelli.
Ri: Come trasporre i dati dal formato lungo a quello largo?Grazie, Ron, ma non sto facendo semplici riassunti. Sto lavorando ad un'analisi di sopravvivenza. Il mio primo passo è ottenere i dati in formato grande.
JoeRi: Come trasporre i dati dal formato lungo a quello largo?Grazie, Jim. In parte ha funzionato. Tuttavia, invece di ottenere una riga per ogni ID oggetto (n = 15.000), mi sono ritrovato con 14 righe di dati e a ogni nome di variabile è stato aggiunto il SubjectID.
I miei dati sono organizzati SubjectID. All'interno di ciò, i soggetti possono avere più righe di dati (codici di trattamento) per ciascuna visita. Nel formato lungo ci sono da 1 a 13 righe di dati per soggetto.
È necessario utilizzare più variabili "divise per"? Dovrebbe essere utilizzato "raggruppa per"?
Grazie,
Joe
Ri: Come trasporre i dati dal formato lungo a quello largo?Jim ha ragione. Tuttavia, se lo fai solo per produrre riepiloghi dei dati per ID, puoi salvare questo passaggio utilizzando Tabelle >>> riepilogo.
migliore,
Ron
Ri: Come trasporre i dati dal formato lungo a quello largo?Quello che vuoi fare è usare
Tabelle==>Dividi
È possibile dividere per ID e specificare var1,var2 e risultato come colonne diviseR: Come posso trasporre i dati dal formato lungo a quello largo?So che è un vecchio thread, ma ho una domanda. Ha funzionato per me, tranne che quando provo a creare la colonna indice, è vuota per il primo ID. Ecco come appare.
Qualcuno sa cosa potrebbe causare questo?

R: Come posso trasporre i dati dal formato lungo a quello largo?Ecco un approccio per ottenere ciò che desideri
If( Row() == 1,
theVal = 1,
If( Lag( :yourColumn ) != :yourColumn,
theVal
++)
);
theVal;
R: Come posso trasporre i dati dal formato lungo a quello largo?Ciao,
Dove dovrei mettere questa formula? Nella stessa colonna Indice? Devo cambiare "yourColumn" in qualcosa?
R: Come posso trasporre i dati dal formato lungo a quello largo?La formula da me specificata verrebbe inserita nella colonna Indice.
"yourColumn" deve essere modificato con il nome della colonna su cui si desidera incrementare il valore della colonna Index quando la colonna viene modificata.