Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Mehr sehen... For (j=3, j<=10, j=j+2,
ColLen=Length(Char(Column name (j)));
ColName=Left (Char(Column Name(j)),ColLen -5);
NewCol=Substr(ColName,6);
New Column(
"Delta: "||NewCol,
Numeric,
Formula (
(Column (j)- Column(j+1))
)
)
);
Automatisierung und SkripterstellungBetreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Scheint „einmal“ zu funktionieren (die Werte sind OK) – aber (zumindest für meinen Testfall) meldet Variante #1 einen Fehler mit der Formel, wenn man sie anschließend öffnet:

Variante Nr. 6 scheint dieses Problem zu lösen:

aber es wird definitiv scheitern, sobald Jmp geschlossen ist und vergisst, was dt bedeutet ....
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.So wie Column() anstelle von Column funktioniert hat!
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.So wie Column() anstelle von Column funktioniert hat!
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Funktioniert nicht 
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Nachdem ich ein bisschen herumgefummelt habe
- vor allem: Ich frage mich, warum #1 nicht das erwartete Ergebnis liefert:
dt = Open( "$Sample_data/iris.jmp" );
cols = {Sepal length,Sepal width, Petal length};
i = 2;
Eval( Eval Expr( dt << New Column( "new1", Formula( As Column( Expr( i ) ) ) ) ) ); //works but the formula is corrupted
Eval( Eval Expr( dt << New Column( "new2", Formula( As Column( Expr( Column(i) ) ) ) ) ) );
Eval( Eval Expr( dt << New Column( "new3", Formula( As Column( Expr( Char( cols[i] ) ) ) ))) );
Eval(Substitute(Expr(dt << New Column( "new4", Formula( __col__ ) )),Expr(__col__),Name Expr(As Column(i)) ));
Eval(Eval Expr(dt << New Column("new5", Formula(Expr(NameExpr(AsColumn(i)))))));
// new:
Eval( Eval Expr( dt << New Column( "new6", Formula( As Column( dt, Expr( i ) ) ) ) ) ); ... Ich habe eine neue Variante gefunden, die die Beilage nicht benötigt Namensausdruck damit es funktioniert *)
Interessant ...
*) arbeiten - bis Jmp geschlossen und neu gestartet wird
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Guter Beitrag zu diesem Thema ist Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden . In Ihrem Fall benötigen Sie eine etwas kompliziertere Lösung, da Sie Spaltenindizes anstelle von Spaltennamen verwenden, wenn Sie Formeln haben möchten (meistens würde ich die Verwendung von Namen anstelle von Indizes empfehlen). Meistens verwende ich Eval(EvalInsert()), aber Ersatz ist auch eine gute Option
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([2, 3, 4])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Set Values([3, 4, 5])),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6])),
New Column("Column 5", Numeric, "Continuous", Format("Best", 12), Set Values([6, 7, 8]))
);
For(j = 1, j < 5, j = j + 2,
// ColLen = Length(Char(Column Name(j)));
// ColName = Left(Char(Column Name(j)), ColLen - 6);
// NewCol = Substr(ColName, 6);
new_col = Word(2, Column(dt, j) << get name, " ");
Eval(Eval Expr(
New Column("Delta: " || new_col, Numeric, Formula(
Expr(NameExpr(AsColumn(j))) - Expr(NameExpr(AsColumn(j + 1)))
))
));
);
Einige zusätzliche Funktionen/Meldungen, die für Sie von Interesse sein könnten: < < Spaltennamen abrufen , Wort() (suchen Sie auch nach Words(), Item() und Items() im Skriptindex), Für jede() (wenn Sie JMP16+ haben)
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.@mmarchandTSI , Ich stimme zu,
Formula(Column( ...
wird nicht funktionieren.
Wie wäre es mit Substitute:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(Substitute(Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (__colA__ - __colB__) ) );
),Expr(__colA__),Name Expr(As Column(j)),Expr(__colB__),Name Expr(As Column(j+1)) ))
);
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Das liegt daran, dass Column() eine Referenz auf die Spalte selbst ist und nicht auf die Werte in der Spalte.Ich weiß, wie man auf hässliche Weise macht, was man will.Das folgende Skript funktioniert in der Zwischenzeit, bis jemand eine schönere Lösung veröffentlicht.
Names Default To Here( 1 );
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(
Parse(
"New Column( \!"Delta: " || NewCol || "\!",
Numeric,
Formula(
:\!"" ||
(Column( j ) << Get Name) || "\!"n - :\!"" || (Column( j + 1 ) << Get Name) || "\!"n
))"
)
);
);
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.JSL verwendet einen dynamischen Bereich. Ich glaube, dass Sie unter der impliziten Annahme eines lexikalischen Bereichs arbeiten (den die meisten Programmiersprachen verwenden).
Da JSL einen dynamischen Bereich verwendet, ist die Bereichsauflösung für den Namen J ist erledigt bei Laufzeit , und wenn die Formel den Namen berechnet J ist nicht mehr im Gültigkeitsbereich, daher tritt ein Fehler auf.
Um dies zu umgehen, können Sie Teile des Codes vorab auswerten, sodass JMP keine Variable zum Nachschlagen in der Spaltenformel hat:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval( Eval Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (Column( Expr( j ) ) - Column( Expr( j + 1 ) )) ) );
) )
);
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.@CrownofTears , Basierend auf Ihrer ursprünglichen JSL:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(
Eval Expr(
New Column( "Delta: " || NewCol,
Numeric,
Formula( (As Column( Expr( Column Name( j ) ) ) - As Column( Expr( Column Name( j + 1 ) ) )) )
)
)
);
);Ich mag die sauberen As Column("Spaltenname")-Funktionen und sie sind nicht hässlich wie meine Eval( Parse(...) )-Lösung.
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Ich hätte darauf hinweisen sollen, dass man, um von der Spaltenreferenz zum Zeilenwert zu gelangen, einfach a eingeben muss [] .Folgendes sollte funktionieren:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval( Eval Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (Column( Expr( j ) )[] - Column( Expr( j + 1 ) )[]) ) );
) )
);
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Ich hätte darauf hinweisen sollen: Um von einem Spaltenverweis zu einem Zeilenwert innerhalb einer Formel zu gelangen, fügen Sie nach dem Spaltenverweis ein [] ein
Column( 1)[] + Column( 2 )[]
Betreff: Ich versuche, eine Spalte zu erstellen und sie mit einer Formel zu füllen, erhalte jedoch eine Fehlermeldung.Cooler Trick 
Column(1)[]
anstatt
Column(1)[row()]