Wie man auf elegante Weise eine Formel auf viele Spalten setzt<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo Leute,
Kann mir jemand bei der folgenden Frage helfen?
Ich möchte lange Formeln wie folgt vermeiden: (jedes Element ist ein Spaltenname!)
Column("Std")<
Formel(
Std-Entwicklung (
:F23 m A,:F23 m C,:F23 m H,:F23 MA,:F23 MC,:F23 MH,:F23 NA,:F23 NC,:F23 NH,
:F30 m A,:F30 m C,:F30 m H,:F30 MA,:F30 MC,:F30 MH,:F30 NA,:F30 NC,:F30 NH,
:F36 m A,:F36 m C,:F36 m H,:F36 MA,:F36 MC,:F36 MH,:F36 NA,:F36 NC,:F36 NH,
:F37 m A,:F37 m C,:F37 m H,:F37 MA,:F37 MC,:F37 MH,:F37 NA,:F37 NC, :F37 NH,
:F49 m A,:F49 m C,:F49 m H,:F49 MA,:F49 MC,:F49 MH,:F49 NA,:F49 NC, :F49 NH,
:F53 m A,:F53 m C,:F53 m H,:F53 MA,:F53 MC,:F53 MH,:F53 NA,:F53 NC, :F53 NH,
:F87 m A,:F87 m C,:F87 m H,:F87 MA,:F87 MC,:F87 MH,:F87 NA,:F87 NC, :F87 NH ) ) );
Prost,
Dan
Betreff: Wie man eine Formel elegant auf viele Spalten setztBeide oben genannten Lösungen funktionieren, aber beachten Sie, dass die Formel für Rons Lösung möglicherweise nur bis zur globalen Variablen funktioniert colnames neu definiert oder gelöscht wird, z. B. wenn die JMP-Sitzung geschlossen wird.
Hier ist ein Code, der die beiden Ansätze vergleicht:
dt = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
colnames = dt << Spaltennamen erhalten ;
// Rons Ansatz: Variablen in Formel werden nicht ausgewertet
dt << Neue Spalte ( "Std" , Formel ( Std.-Entw ( colnames [ 4 :: 5 ]))) ;
// Ansatz von Ian: Variablen werden vor dem Festlegen der Formel ausgewertet
Formel = Bewertungsausdr ( Std.-Entw ( Ausdruck ( colnames [ 4 :: 5 ]))) ;
dt << Neue Spalte ( "Std2" , Formel ( Name Ausdruck ( Formel ))) ;
// Formeln im Protokoll vergleichen
Drucken ( : Std << Formel bekommen , Std2 << Formel bekommen ) ;
//Variablendefinitionen löschen und Zeilen hinzufügen. Nur Std2 erkennt Änderungen
Global löschen () ;
Aktuelle Datentabelle () << verketten (
Offen ( "$SAMPLE_DATA/Schüler2.jmp" ) ,
an die erste Tabelle anhängen
) ;
Betreff: Wie man eine Formel elegant auf viele Spalten setzthallo danke77 ,
Ian@JMP Die Lösung von ist richtig. Wenn Sie jedoch nach etwas weniger Strengen suchen, können Sie Folgendes versuchen.
Angenommen, die Spalten, die Sie für die Formel benötigen, befinden sich alle in einem Bereich, können Sie die Nummer der ersten und letzten wie folgt eingeben:
dt = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
colnames = dt << Spaltennamen erhalten ;
Kol = dt << neue Spalte ( "Std" ) ;
Kol << Formel einstellen ( Standardentwicklung ( colnames [ 4 :: 5 ] )) ;
Beste,
Ron
Betreff: Wie man eine Formel elegant auf viele Spalten setztDieser Code „vermeidet“ in dem Sinne, dass er die aktuell ausgewählten Spalten verwendet, sodass Sie nichts eingeben müssen. Ist es das, wonach Sie suchen, bitte?
Führen Sie „Datei > Neu > Neues Skript“ aus, schneiden Sie die JSL aus und fügen Sie sie ein, und führen Sie dann „Bearbeiten > Skript ausführen“ aus.
NamesDefaultToHere ( 1 ) ;
// Erstellen Sie eine Tabelle
nc = 30 ;
dt = NeueTabelle ( "Prüfen" ) ;
zum ( c = 1 , c <= nc , c ++,
dt << NeueSpalte ( "Kol" || Verkohlen ( c ) , Numerisch , Kontinuierlich , Formel ( ZufälligNormal ())) ;
) ;
dt << Zeilen hinzufügen ( 100 ) ;
// Wählen Sie die Hälfte der Spalten aus
n = Runden ( nc / 2 ) ;
c = Zufallsindex ( NCol ( dt ) , n ) ;
zum ( ich = 1 , ich <= n , ich ++,
Spalte ( dt , c [ ich ]) << setSelected ( 1 ) ;
) ;
// Führen Sie diesen Code aus, um eine neue Formelspalte für die Standardabweichung der aktuell in einer Tabelle ausgewählten Spalten zu erstellen
selCols = dt << getSelectedColumns ;
addCol = Ausdruck ( dt << NeueSpalte ( "StdDev" , Numerisch , Kontinuierlich , Formel ( StdDev ( colsTBD )))) ;
ErsatzInto ( addCol , Ausdruck ( colsTBD ) , Bewertung ( selCols )) ;
addCol ;