列を作成して数式を入力しようとしましたが、エラーが発生しました。もっと見る... 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))
)
)
);
自動化とスクリプト作成Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。「一度」は機能するようです (値は問題ありません) - しかし、(少なくとも私のテストケースでは) バリアント #1 は、後で開くと数式のエラーを報告します。

バリアント #6 はこの問題を解決するようです。

しかし、Jmp が閉じられ、何を忘れてしまうと間違いなく失敗します。 dt手段 ....
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。列の代わりに Column() が機能したのと同じように。
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。列の代わりに Column() が機能したのと同じように。
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。動作しません:(
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。少しいじってから
- esp: なぜ #1 が期待した結果をもたらさないのか不思議です:
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 ) ) ) ) ) ); ...囲みを必要としない新しいバリアントを見つけました名前の説明それを機能させるために *)
面白い ...
*) 仕事 - Jmp が閉じられて再び開始されるまで
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。このトピックに関する良い投稿は次のとおりですEval Insert、Eval Expr、Parse、Substitute を使用して、ある式を別の式に挿入する。 あなたの場合、数式を使用したい場合は列名の代わりに列インデックスを使用しているため、もう少し複雑な解決策が必要です(ほとんどの場合、インデックスの代わりに名前を使用することをお勧めします)。 ほとんどの場合、私は Eval(EvalInsert()) を使用しますが、置換も良い選択肢です
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)))
))
));
);
興味のある追加の機能/メッセージ: < < 列名の取得、言葉() (スクリプト インデックスから Words()、Item()、および Items() も検索します)、それぞれについて() (JMP16+をお持ちの場合)
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。@mmarchandTSI 、 同意します、
Formula(Column( ...
機能しません。
置換を使用してみてはいかがでしょうか:
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)) ))
);
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。これは、Column() が列内の値ではなく列自体への参照であるためです。私は自分のやりたいことを醜い方法で実現する方法を知っています。次のスクリプトは、誰かがより適切な解決策を投稿するまで、当面は機能します。
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
))"
)
);
);
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。JSL は動的スコープを使用します。(ほとんどのプログラミング言語が使用する) 字句スコープの暗黙の前提の下で作業していると思います。
JSL は動的スコープを使用するため、名前のスコープ解決はjで行われますランタイム、そして数式が名前を計算しているときjはスコープ内にないため、エラーが発生します。
これを回避するには、コードの一部を事前評価して、JMP が列式内で検索する変数を持たないようにすることができます。
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 ) )) ) );
) )
);
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。@CrownTears , 元の 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 ) ) )) )
)
)
);
);私はクリーンな As Column("column name") 関数が好きで、私の Eval( Parse(...) ) ソリューションのように醜いものではありません。
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。列参照から行値に移動するには、単純に[] 。以下は機能するはずです:
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 ) )[]) ) );
) )
);
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。指摘すべきだった -- 式内の列参照から行値に移動するには、列参照の後に [] を入れます。
Column( 1)[] + Column( 2 )[]
Re: 列を作成して数式を入力しようとしましたが、エラーが発生しました。クールなトリック:)
Column(1)[]
の代わりに
Column(1)[row()]