Umgang mit fehlenden Daten<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich muss eine deskriptive Analyse für eine große Anzahl von Spalten durchführen. Dazu habe ich das folgende Skript erstellt:
dt = Aktuelle Datentabelle();
Column_names = dt << Get Column Names(numeric,String);
for(i=3,i<=NItems(column_names),i++,
colName = Spaltennamen ;
cmd = Ausdruck(
ow = dt << Verteilung(
Kontinuierliche Verteilung (Spalte (cName)),
Wo( :SEX == "F" )
);
owr = ow<
);
Substitute Into(cmd,Expr(cName),colName);
Eval(cmd);
);
Aktuelles Journal() << Save HTML(".....\test.htm");
Wenn ich es jetzt ausführe, erhalte ich im Protokollfenster die Fehlermeldung „Eine oder mehrere Spalten enthalten nur fehlende Werte.“
Ich habe einige Spalten, in denen alle Werte oder nur die für bestimmtes „GESCHLECHT“ Daten fehlen. Wie könnte ich es in meiner Schleife überprüfen und sie in der Analyse überspringen?
Danke
Betreff: Wie gehe ich mit fehlenden Daten um?Sehr geehrte Frau,
Dieses letzte Skript hat perfekt funktioniert. Ich habe in dieser Diskussion viel gelernt.
Nochmals vielen Dank für all Ihre Hinweise.
Betreff: Wie gehe ich mit fehlenden Daten um?Der Stapel ist nur ein Zwischenschritt, um Daten in einer einzelnen Spalte anzuordnen. Der Fehler kann sein, dass entweder die Beschriftungs- oder die Datenspalte nicht die Namen „Position“ und „Daten“ erhalten, die der Zusammenfassungsbefehl hier annimmt. Entfernen Sie die Option „unsichtbar“ und sehen Sie sich die gestapelte Tabelle an, um die Spaltennamen zu sehen, und ändern Sie „Summary“ entsprechend, wenn etwas nicht wie beabsichtigt benannt ist (wie im JSL-Kommentar über dem Argument „Stacked Data Column(“Data“) erwähnt wird in JMP 10 ignoriert, wenn die Spalten wie in Ihrer ursprünglichen Tabelle gruppiert sind, daher der Befehl zum Aufheben der Gruppierung in meinem Beispiel oben).
Wenn das ein Fehlverhalten ist, können Sie statt „Stack“ auch „Summary“ und „Transpose“ gleichzeitig verwenden, um ein ähnliches Ergebnis zu erzielen. Probieren Sie das folgende Beispiel aus (funktioniert mit der veröffentlichten Tabelle „Beispiel“).
dt = Datentabelle ( "Beispiel" ) ;
Spaltennamen = dt << Spaltennamen abrufen ( numerisch ) ;
( dt << Zusammenfassung (
Gruppe ( : SEX ) ,
Bedeuten ( Bewertung ( Spaltennamen ) ) ,
Namensformat der Statistikspalte ( "Spalte" )
)) << Transponieren ( Etikett ( : SEX ) , Ausgabetabelle ( "Ergebnis" ) ) ;
Betreff: Wie gehe ich mit fehlenden Daten um?Sehr geehrte Frau,
Vielen Dank für den Vorschlag dieser neuen Methode. Ich denke, es ist schneller und effizienter. Wenn ich das Skript ausführe, erhalte ich jedoch die folgende Fehlermeldung:
Spalte beim Zugriff oder bei der Auswertung von „Bad Argument“ nicht gefunden
Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, dt_stacked << Summary( Group( :Position ), Mean( :Data ), Subgroup( :SEX ) )
Im folgenden Skript ist der Fehler mit /*###*/ markiert.
::dt = Datentabelle( "Beispiel" );
::column_names = ::dt << Get Column Names( numeric );
::dt_stacked = ::dt << Stack(
Spalten( ::column_names ),
Quellbeschriftungsspalte( „Position“),
Gestapelte Datenspalte („Daten“),
unsichtbar
);
::dt_sum = ::dt_stacked << /*###*/Summary(
Gruppe( :Position ),
Mittelwert(:Daten),
Untergruppe( :SEX )
) /*###*/;
Column( 3 ) << set name( "Female" );
Column( 4 ) << set name( "male" );
dt_sum << Neue Spalte( "Verhältnis", Formel( Weiblich / Männlich ) );
dt_stacked << Fenster schließen;
Es scheint, dass bei der Stapelerstellung etwas nicht stimmt. Haben Sie eine Idee, warum ein solcher Fehler aufgetreten ist?
Nochmals vielen Dank für all Ihre Hilfe.
Betreff: Wie gehe ich mit fehlenden Daten um?Ich erhalte diese Meldung nicht, wenn ich das Skript auf die oben veröffentlichte Beispieltabelle anwende. Allerdings owr[NumberColBox(4)]; gibt einen Fehler aus, da es nicht existiert. Der Code liefert bisher nur Ergebnisse für „F“ und nicht für „M“, was Sie vermutlich auch in der Ergebnistabelle auflisten möchten.
Wenn Ihr einziges Ziel die Zusammenfassung ist, würde ich die Funktion „Summary()“ verwenden, anstatt viele Verteilungsberichte zu durchlaufen.
Ein Beispiel:
dt = Datentabelle ( "Beispiel" ) ;
Spaltennamen = dt << Spaltennamen abrufen ( numerisch ) ;
dt << Spaltengruppierung aufheben ( Spaltennamen ) ; // Scheint ein Fehler in JMP 10 mit gestapelten Datenspaltennamen und gruppierten Spalten zu sein
dt_stacked = dt << Stapel (
Säulen ( Spaltennamen ) ,
Spalte „Quellenbeschriftung“. ( "Position" ) ,
Gestapelte Datenspalte ( "Daten" ) ,
unsichtbar
) ;
dt_sum = dt_stacked << Zusammenfassung (
Gruppe ( : Position ) ,
Bedeuten ( : Daten ) ,
Untergruppe ( : SEX )
) ;
Spalte ( 3 ) << Name einsetzen ( "Weiblich" ) ;
Spalte ( 4 ) << Name einsetzen ( "männlich" ) ;
dt_sum << Neue Spalte ( "Verhältnis" , Formel ( Weiblich / Männlich ) ) ;
dt_stacked << Fenster schließen ;
Betreff: Wie gehe ich mit fehlenden Daten um?Ich habe die Skripte wie folgt geändert:
dt = Datentabelle("Beispiel");
Column_names = dt << Get Column Names(numeric,String);
results = Neue Tabelle("Ergebnisse", sichtbar,
Neue Spalte("Position", Zeichen),
Neue Spalte („Weiblich“, numerisch),
Neue Spalte("Männlich", numerisch),
Neue Spalte („Verhältnis“, Formel (weiblich/männlich)),
Zeilen hinzufügen(NItems(column_names))
);
for(i=1,i<=NItems(column_names),i++,
If( N Row( dt << Zeilen abrufen where( And( :SEX[] == "F", !Is Missing( Column( Spaltennamen )[] ) ) ) ),
colName = Spaltennamen ;
cmd = Ausdruck(
ow = dt << Distribution( Continuous Distribution( Column( cName ) ),
Where( :SEX == "F" ) );
owr = ow<
allmean= owr[NumberColBox(2)];
Fmean = allmean[1];
allmean1= owr[NumberColBox(4)];
Mmean = allmean1[1];
Spalte(Ergebnisse,1) = colName;
Spalte(Ergebnisse,2) = Fmean;
Spalte(Ergebnisse,3) = Mmean;
ow << Fenster schließen;
);
Substitute Into( cmd, Expr( cName ), colName );
Eval( cmd );
)
);
Ergebnisse << Journal;
Jetzt erhalte ich diese Meldung im Protokollfenster
„Spalte konnte nicht gefunden werden{1}
beim Zugriff oder bei der Auswertung von 'Column' , Column( columns_names )"
und es bezieht sich auf diese Zeile:
„:SEX[] == „F“ & !Is Missing( Column/*###*/(::column_names[::i])[] )“
Danke für Ratschläge
Betreff: Wie gehe ich mit fehlenden Daten um?Ich denke, dass der Fehler durch falsche Platzierung verursacht wird
dt = aktuelle Datentabelle()
Es weist dt die neue Tabelle „Ergebnisse“ und nicht Ihre ursprüngliche Tabelle zu. Und Ergebnisse haben keine Spalte mit dem Namen :SEX
Versuchen Sie es stattdessen mit dt = data table("Example").
Betreff: Wie gehe ich mit fehlenden Daten um?Sehr geehrte Frau,
Vielen Dank für Ihre Anleitung. Ich habe Ihre vorgeschlagenen Codes hinzugefügt und mein Skript wie folgt geändert, um Ergebnisse in eine Tabelle zu exportieren:
results = Neue Tabelle("Ergebnisse", sichtbar,
Neue Spalte("Position", Zeichen),
Neue Spalte („Weiblich“, numerisch),
Neue Spalte("Männlich", numerisch),
Neue Spalte („Verhältnis“, Formel (weiblich/männlich)),
Zeilen hinzufügen(NItems(column_names))
);
dt = Aktuelle Datentabelle();
Column_names = dt << Get Column Names(numeric,String);
for(i=1,i<=NItems(column_names),i++,
If( N Row( dt << Zeilen abrufen where( And( :SEX[] == "F", !Is Missing( Column( Spaltennamen )[] ) ) ) ),
colName = Spaltennamen ;
cmd = Ausdruck(
ow = dt << Distribution( Continuous Distribution( Column( cName ) ),
Where( :SEX == "F" ) );
owr = ow<
allmean= owr[NumberColBox(2)];
Fmean = allmean[1];
allmean1= owr[NumberColBox(4)];
Mmean = allmean1[1];
Spalte(Ergebnisse,1) = colName;
Spalte(Ergebnisse,2) = Fmean;
Spalte(Ergebnisse,3) = Mmean;
ow << Fenster schließen;
);
Substitute Into( cmd, Expr( cName ), colName );
Eval( cmd );
)
);
Ergebnisse << Journal;
Wenn ich es jetzt ausführe, erhalte ich eine Fehlermeldung für SEX. Zum Testen habe ich ein Beispiel meiner Datendatei angehängt.
Vielen Dank im Voraus für Ihre Hilfe.
Betreff: Wie gehe ich mit fehlenden Daten um?Es gibt (wie üblich) mehrere Möglichkeiten, dies zu tun. Nachfolgend finden Sie einen Ansatz, der funktionieren sollte.
dt = Aktuelle Datentabelle () ;
Spaltennamen = dt << Spaltennamen abrufen ( numerisch , Zeichenfolge ) ;
Für ( ich = 3 , ich <= N Artikel ( Spaltennamen ) , ich ++,
// wenn in Spalte i nichts fehlt, wobei SEX="F" > 0 ist, Dinge tun, sonst nächstes i
Wenn ( N-Reihe ( dt << Holen Sie sich Zeilen wo ( Und ( : SEX [] == "F" , ! Wird vermisst ( Spalte ( Spaltennamen [ ich ] )[] ) ) ) ) ,
colName = Spaltennamen [ ich ] ;
cmd = Ausdruck (
Autsch = dt << Verteilung ( Kontinuierliche Verteilung ( Spalte ( cName ) ) , Wo ( : SEX == "F" ) ) ;
owr = Autsch << Bericht ;
) ;
Ersetzen in ( cmd , Ausdruck ( cName ) , colName ) ;
Bewertung ( cmd ) ;
)
) ;
Aktuelles Journal () << HTML speichern ( "....\test.htm" ) ;