数式で (列名の代わりに) 列インデックスを使用する方法。やあ、
for ループでこれを実行しようとしています。
現在のテーブルには 14 列があります。 列 #3 ~ #14 を「ステップ 1」から「ステップ 12」と名付けました。
for ループで、式 (Col(4) -Col(2)) で計算される列 #15 (i = 2、i <=12、i++ の場合は「デルタ ステップ i」という名前) を作成します。 その後、列#3が削除されました。 同じ式が次の反復で再利用されます。
ここで問題が 2 つありますが、
1) 出力テーブルの列 #15 に値がないため、数式は機能しません。
2)列 3 が検出されると、列 15 (実際には列 3 が削除された後の列 14) の値が失われるのではないかと心配しています。
これが私のスクリプトです。
For(i=2,i<=15,i++,
DeltaStep = "Delta Step "||Char(i);
New Column(DeltaStep)<<FORMULA></FORMULA>
これも試しましたが、うまくいきませんでした。
For(i=2,i<=12,i++,
DeltaStep = "Delta Step "||Char(i);
Pre = Column(3) << getname;
Pst = Column(4) << getname;
New Column(DeltaStep)<<FORMULA></FORMULA>
Re: 数式で (列名の代わりに) 列インデックスを使用する方法。よく釣れました! 行単位の計算には、Column(#) または Column("name") に空の括弧 ( [] ) または As Column() ラッパーが必要であることを忘れがちです。 私は参照を列ヘッダーと属性へのポインターとして考えるのが好きで、 ref[] は値のベクトルまたはリストを公開します。
列の削除に関してはテーブルメッセージです。事前に列を選択せずに、以下の JSL を使用することもできます。
dt << Delete Columns( 3 );
もう 1 つのよくある間違いは、別の列式の引数として使用されている列を削除しようとすることです。列 4 で列 3 を参照する数式が使用されているとします。 列 4 の依存式を削除する必要があります。その後、列 3 を削除できます。
これは、ほとんどの場合に << Set Each Value(expression) と Formula (expression) を使用するもう 1 つの理由です。その場合、新しい列はロックされず、依存関係は存在しません。
Re: 数式で (列名の代わりに) 列インデックスを使用する方法。「列の削除」式も間違っています。
ここに正しいスクリプトを添付しました。これを行うより良い方法があれば教えてください。
ありがとう!
For(i=2,i<=12,i++,
DeltaStep = "Delta Step "||Char(i);
New Column(DeltaStep,formula(Column(4)[] - Column(3)[]));
Column(3) << Set Selected;
dt << Delete Columns
);
Re: 数式で (列名の代わりに) 列インデックスを使用する方法。これを正しく行わない理由が分かったと思います...
私の投稿の最初のスクリプトでは、Column(3) の後に [] を追加する必要があります...
ありがとう、
ジハオ