Erstellen einer laufenden Summe einer Spalte<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich frage mich, wie ich in einer JMP-Tabelle eine Spalte erstellen kann, die die laufende Summe einer anderen Spalte darstellt (auf die ich möglicherweise über den Spaltennamen als Zeichenfolge verweisen muss). Das heißt, wenn ich eine Spalte mit den folgenden Daten habe:
1
2
3
4
5
Ich möchte eine Spalte mit einer Formel erstellen, deren Inhalt funktionieren würde
1
3
6
10
15
Derzeit habe ich diese Schleife, die anhand einer Liste von Spaltennamen arbeitet, um die laufende Summe von Folgendem zu ermitteln:
For(i = 2, i <= numCols, i++,
colName = colNames ;
col = New Column("Cumulative" || colName,
Formel(Summation(j = 1, Row(), As Column(ColName)))
);
);
Das scheint zu funktionieren, ist aber sehr langsam und wenn ich mehrere Spalten erstelle, enthalten sie alle irgendwie die gleichen Daten. Wie geht das am besten?
Betreff: Erstellen einer laufenden Summe einer SpalteÜbrigens, wenn die Liste der colNames Namen statt Strings enthält, scheint dieser Ansatz das gleiche Ergebnis zu liefern wie der analysierte String:
colNames = dt << Spaltennamen abrufen ( ) ; // Ohne die Option „string“!
numCols = N Artikel ( colNames ) ;
Für ( ich = 1 , ich <= numCols , ich ++,
colName = colNames [ ich ] ;
neuer Name = „Kumulativ“ || ( colName << Namen bekommen ) ;
Kol = Neue Spalte ( neuer Name , Numerisch , Kontinuierlich ,
Formel ( Bewertung ( Ersatz (
Ausdruck ( Summe ( J = 1 , Reihe () , xxx [ J ])) ,
Ausdruck ( xxx ) , colNames [ ich ]
)))
) ;
) ;
Betreff: Erstellen einer laufenden Summe einer SpalteJa, das sollte funktionieren, solange die Spalten nie umbenannt werden.
Dieser Code veranschaulicht den Unterschied zwischen den beiden Ansätzen. Die hässliche String-Methode kodiert die Formel fest in eine bestimmte Spalte. Die zweite Methode sucht nach einer Spalte mit einem bestimmten Namen (was nützlich sein könnte)
// Beispieltabelle
dt = Neuer Tisch ( "Prüfen" ,
Zeilen hinzufügen ( 4 ) ,
Neue Spalte ( „Spalte1“ , Numerisch , Werte festlegen ( [ 1 , 2 , 3 , 4 ] ) )
) ;
// Formel nach analysierter Zeichenfolge hinzufügen
colNames = dt << Spaltennamen abrufen ( Zeichenfolge ) ;
numCols = N Artikel ( colNames ) ;
Für ( ich = 1 , ich <= numCols , ich ++,
colName = colNames [ ich ] ;
Kol = Neue Spalte ( „Kumulativ“ || colName , Numerisch ) ;
Bewertung (
Analysieren (
Evaluierungseinlage (
"col<< Set Formula(Summation(j = 1, row(), ^(ColName)^))"
)
)
) ;
) ;
// Formel durch Ersetzen von Ausdruck hinzufügen
Für ( ich = 1 , ich <= numCols , ich ++,
colName = colNames [ ich ] ;
neuer Name = „Kumulativ“ || colName ;
Kol = Neue Spalte ( neuer Name ,
Numerisch ,
Kontinuierlich ,
Formel (
Bewertung (
Ersatz (
Ausdruck (
Summe ( J = 1 , Reihe () , Als Spalte ( xxx )[ J ] )
) ,
Ausdruck ( xxx ) , colName
)
)
)
) ;
) ;
Warten ( 1 ) ;
// Spaltennamen und einen Wert ändern und sehen, wie Formeln funktionieren
Spalte ( 1 ) << Name einsetzen ( "Neuer Name" ) ;
Spalte ( 1 )[ 1 ] = 100 ;
Warten ( 2 ) ;
// Neue Spalte mit demselben Namen wie die ursprüngliche Spalte hinzufügen.
dt << Neue Spalte ( „Spalte1“ , numerisch , Werte ( [ 1 , 1 , 1 , 1 ] ) ) ;
dt << Formeln erneut ausführen ;
Betreff: Erstellen einer laufenden Summe einer SpalteIch denke, wenn es eine Möglichkeit gibt, JSL durch das Parsen einer Zeichenfolge dazu zu bringen, das zu tun, was Sie möchten, dann sollte es auch eine Möglichkeit geben, dies ohne Verwendung der Parse-Funktion mit einfachem JSL-Code (der schließlich nur eine Zeichenfolge ist) zu tun. . Folgendes habe ich mit Substitute zum Laufen gebracht:
For(i = 2, i <= numCols, i++,
colName = colNames ;
newName = „Kumulativ“ || colName;
col = Neue Spalte(newName, Numeric, Continuous,
Formel(Eval(Ersatz(
Expr(Summation(j = 1, Row(), As Column(xxx))),
Ausdruck(xxx), Spaltenname
)))
);
);
Betreff: Erstellen einer laufenden Summe einer SpalteFormula() wertet sein Argument nicht aus, daher enthalten alle Spaltenformeln die Variablen ColName und J und werden im Verlauf der Schleife aktualisiert.
Hier ist eine Möglichkeit, dies zu umgehen:
Für ( ich = 2 , ich <= numCols , ich ++,
colName = colNames [ ich ] ;
Kol = Neue Spalte ( „Kumulativ“ || colName , Numerisch ) ;
Bewertung (
Analysieren (
Evaluierungseinlage (
"col<< Set Formula(Summation(j = 1, row(), ^(ColName)^))"
)
)
) ;
) ;