Come gestire i dati mancanti<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Devo eseguire un'analisi descrittiva su un numero enorme di colonne. Per farlo ho creato il seguente script:
dt = Tabella dati corrente();
column_names = dt << Ottieni nomi di colonne (numerico, stringa);
for(i=3,i<=NIvoci(nomi_colonna),i++,
colName = nomi_colonne ;
cmd = Espr(
ow = dt << Distribuzione(
Distribuzione continua( Colonna( cName ) ),
Dove( :SEX == "F" )
);
owr = ow<
);
Sostituisci Into(cmd,Expr(cName),colName);
Eval(cmd);
);
Current Journal() << Salva HTML(".....\test.htm");
Ora, quando lo eseguo, ricevo un messaggio di errore nella finestra di registro "Una o più colonne non hanno altro che valori mancanti".
Ho alcune colonne in cui mancano dati a tutti i valori o solo a quelli per "SESSO" specifico. Come posso controllarlo nel mio ciclo e saltarli nell'analisi?
Grazie
Re: Come gestire i dati mancantiCara Sig.ra,
Quest'ultimo script ha funzionato perfettamente. Ho imparato molto in questa discussione.
Grazie ancora per tutta la tua guida.
Re: Come gestire i dati mancantiLo stack è solo un passaggio intermedio per disporre i dati in una singola colonna. L'errore potrebbe essere dovuto al fatto che l'etichetta o le colonne di dati non ricevono i nomi "Posizione" e "Dati" che il comando di riepilogo assume qui. Rimuovi l'opzione "invisibile" e guarda la tabella in pila per vedere i nomi delle colonne e modifica Riepilogo di conseguenza se qualcosa non è chiamato come previsto (come notato nel commento jsl sopra l'argomento Colonna dati in pila ("Dati") sembra essere ignorato in JMP 10 se le colonne sono raggruppate come nella tabella originale, da qui il comando di separazione nel mio esempio sopra).
Invece di stack, se questo è un comportamento scorretto, puoi invece utilizzare sommario e trasporre in tandem per ottenere un risultato simile. Prova l'esempio seguente (funziona con la tabella pubblicata "Esempio") .
dt = Tabella dati ( "Esempio" ) ;
nomi_colonna = dt << Ottieni i nomi delle colonne ( numerico ) ;
( dt << Riepilogo (
Gruppo ( : SESSO ) ,
Significare ( Valutazione ( nomi_colonna ) ) ,
formato del nome della colonna delle statistiche ( "colonna" )
)) << Trasporre ( Etichetta ( : SESSO ) , Tabella delle uscite ( "Risultato" ) ) ;
Re: Come gestire i dati mancantiCara Sig.ra,
Grazie mille per aver suggerito questo nuovo metodo. Penso che sia più veloce ed efficiente. Tuttavia, quando eseguo lo script ottengo un errore come segue:
Colonna non trovata nell'accesso o nella valutazione di "Argomento errato"
Send Expects Scriptable Object in accesso o valutazione di 'Send' , dt_stacked << Summary( Group( :Position ), Mean( :Data ), Subgroup( :SEX ) )
Nello script seguente, errore contrassegnato da /*###*/
::dt = Tabella dati( "Esempio" );
::column_names = ::dt << Ottieni i nomi delle colonne ( numerico );
::dt_stacked = ::dt << Stack(
colonne( ::column_names ),
Colonna Etichetta sorgente( "Posizione" ),
Colonna di dati in pila ("Dati"),
invisibile
);
::dt_sum = ::dt_stacked << /*####*/Summary(
Gruppo( :Posizione ),
Media( :Dati ),
Sottogruppo( :SESSO )
) /*####*/;
Column( 3 ) << set name( "Femmina" );
Colonna( 4 ) << set nome( "maschio" );
dt_sum << Nuova colonna( "Rapporto", Formula( Femmina / Maschio ) );
dt_stacked << chiudi finestra;
Sembra che qualcosa non vada bene nella creazione dello stack. Hai idea del perché sia stato generato un errore del genere?
Grazie ancora per tutti i tuoi aiuti.
Re: Come gestire i dati mancantiNon ricevo quel messaggio se applico lo script alla tabella di esempio pubblicata sopra. Tuttavia, owr[NumberColBox(4)]; restituisce un errore perché non esiste. Il codice finora fornisce solo risultati per "F" e non per "M" che presumo tu voglia elencare anche nella tabella dei risultati.
Se il tuo unico obiettivo è riassumere significa che userei la funzione Summary () invece di scorrere molti rapporti di distribuzione.
Un esempio:
dt = Tabella dati ( "Esempio" ) ;
nomi_colonna = dt << Ottieni nomi di colonna ( numerico ) ;
dt << Separa colonne ( nomi_colonna ) ; // Sembra un bug in JMP 10 con il nome della colonna di dati in pila e le colonne raggruppate
dt_stacked = dt << Pila (
colonne ( nomi_colonna ) ,
Colonna Etichetta sorgente ( "Posizione" ) ,
Colonna dati in pila ( "Dati" ) ,
invisibile
) ;
somma_dt = dt_stacked << Riepilogo (
Gruppo ( : Posizione ) ,
Significare ( : Dati ) ,
Sottogruppo ( : SESSO )
) ;
Colonna ( 3 ) << imposta nome ( "Femmina" ) ;
Colonna ( 4 ) << imposta nome ( "maschio" ) ;
somma_dt << Nuova Colonna ( "Rapporto" , Formula ( Femmina / Maschio ) ) ;
dt_stacked << chiudi la finestra ;
Re: Come gestire i dati mancantiHo modificato gli script come segue:
dt = tabella dati("Esempio") ;
column_names = dt << Ottieni nomi di colonne (numerico, stringa);
risultati = Nuova tabella("Risultati", visibile,
Nuova colonna("Posizione", carattere),
Nuova colonna("Femmina", numerico),
Nuova colonna("Maschio", numerico),
Nuova colonna("Rapporto", Formula(Femmina/Maschio)),
Aggiungi righe (NItems (column_names))
);
for(i=1,i<=NIvoci(nomi_colonna),i++,
If( N Row( dt << ottiene righe where( And( :SEX[] == "F", !Is Missing( Column( nome_colonna )[] ) ) ) ),
colName = nomi_colonna ;
cmd = Espr(
ow = dt << Distribuzione( Distribuzione continua( Colonna( cName ) ),
Dove( :SEX == "F" ) );
owr = ow<
allmean= owr[NumberColBox(2)];
Fmedia = media[1];
allmean1= owr[NumberColBox(4)];
Mmean = allmean1[1];
Colonna(risultati,1) = colNome;
Colonna(risultati,2) = Fmedia;
Colonna(risultati,3) = Mmedia;
ow << Chiudi finestra;
);
Sostituisci Into( cmd, Expr( cName ), colName );
Eval( cmd );
)
);
risultati << rivista;
Ora ricevo questo messaggio nella finestra di registro
"impossibile trovare la colonna{1}
in accesso o valutazione di 'Column' , Column( column_names )"
e fa riferimento a questa riga:
":SEX[] == "F" & !Is Missing( Column/*###*/(::column_names[::i])[] )"
Grazie per i consigli
Re: Come gestire i dati mancantiPenso che l'errore sia causato da fuori luogo
dt = tabella dati corrente()
Assegna la nuova tabella "Risultati" anziché la tabella originale a dt . E Risultati non ha una colonna denominata :SEX
Prova invece dt = data table("Esempio").
Re: Come gestire i dati mancantiCara Sig.ra,
Grazie per la tua guida. Ho aggiunto i codici suggeriti e ho modificato il mio script per esportare i risultati in una tabella come segue:
risultati = Nuova tabella("Risultati", visibile,
Nuova colonna("Posizione", carattere),
Nuova colonna("Femmina", numerico),
Nuova colonna("Maschio", numerico),
Nuova colonna("Rapporto", Formula(Femmina/Maschio)),
Aggiungi righe (NItems (column_names))
);
dt = Tabella dati corrente();
column_names = dt << Ottieni nomi di colonne (numerico, stringa);
for(i=1,i<=NIvoci(nomi_colonna),i++,
If( N Row( dt << ottiene righe where( And( :SEX[] == "F", !Is Missing( Column( nome_colonna )[] ) ) ) ),
colName = nomi_colonna ;
cmd = Espr(
ow = dt << Distribuzione( Distribuzione continua( Colonna( cName ) ),
Dove( :SEX == "F" ) );
owr = ow<
allmean= owr[NumberColBox(2)];
Fmedia = media[1];
allmean1= owr[NumberColBox(4)];
Mmean = allmean1[1];
Colonna(risultati,1) = colNome;
Colonna(risultati,2) = Fmedia;
Colonna(risultati,3) = Mmedia;
ow << Chiudi finestra;
);
Sostituisci Into( cmd, Expr( cName ), colName );
Eval( cmd );
)
);
risultati << rivista;
Ora, quando lo eseguo mi dà un errore per SEX. Ho allegato un esempio del mio file di dati per il test.
Grazie in anticipo per il vostro aiuto.
Re: Come gestire i dati mancantiCi sono diversi modi per farlo (come al solito). Di seguito è riportato un approccio che dovrebbe funzionare.
dt = Tabella dei dati correnti () ;
nomi_colonna = dt << Ottieni nomi di colonna ( numerico , Corda ) ;
Per ( io = 3 , io <= N articoli ( nomi_colonna ) , io ++,
// se non manca nella colonna i dove SEX="F" > 0, fai cose, altrimenti dopo i
Se ( Riga N ( dt << ottenere righe dove ( E ( : SESSO [] == "F" , ! Manca ( Colonna ( nomi_colonna [ io ] )[] ) ) ) ) ,
colNome = nomi_colonna [ io ] ;
cmd = Espr (
ahi = dt << Distribuzione ( Distribuzione continua ( Colonna ( cNome ) ) , Dove ( : SESSO == "F" ) ) ;
ora = ahi << rapporto ;
) ;
Sostituisci in ( cmd , Espr ( cNome ) , colNome ) ;
Valutazione ( cmd ) ;
)
) ;
Giornale attuale () << Salva HTML ( ".....\prova.htm" ) ;