式、列参照、数式、列名の変更についてサポートが必要な場合全て、
次のような場合には助けが必要です。
列の名前を文字列形式で持っています。
古い列に基づいて数式を使用して新しい列を作成する必要があります。 私は次のようにします:
oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
次に、スクリプトの後の方で、古い列の名前を変更する必要があります。 私は次のようにします:
Column(oldCol) << Set Name("NewOldColumn");ここでの問題は、新しい列の数式が次の形式になっているということです。
As Column("OldColumn")OldColumn の名前が変更されても更新されません。
という形にしたいと思います。
:OldColumn
でもその方法がわかりません。
そこで問題は、式をどのように変更する必要があるかということです。
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
次の形式の式が生成されます。 :古い列の形ではなく、列として("OldColumn") ?
再生する完全なスクリプトは次のとおりです。
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");ありがとう、M.
消費者および市場調査Re: 式、列参照、数式、列名の変更についてサポートが必要ですJSL Quote() についてのヒントをありがとう! すべての引用符をエスケープする必要がなくなったので、本当にすっきりしました。
Re: 式、列参照、数式、列名の変更についてサポートが必要です質問で説明したように、「列として」の問題は、式内に残り、後で列内で参照する列の名前を変更すると(実際に変更すると)、式が無効になることです。
申し訳ありませんが、Expr --> Name Expr --> As Column の組み合わせでは機能します。 As Column("string") を :string に変換します。
ここでいくつかの解決策を提示されましたが、JSL Quote を使用した解決策がとても気に入りましたが、これが私の新しいお気に入りです。 スクリプトをもう一度最初からやり直す必要があります:)
Re: 式、列参照、数式、列名の変更についてサポートが必要ですもう 1 つのオプションは、Eval()、EvalExpr()、Expr()、Name Expr()、および As Column() の組み合わせです。
Names Default To Here(1);
dt = New Table("TestColumnsReferences", Add Rows(3),
New Column("OldColumn", Character, "Nominal", Set Values({"a", "b", "c"}))
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval(Eval Expr(dt << New Column("NewColumn", formula(Expr(Name Expr(AsColumn(oldCol)))))));
Column(oldCol) << Set Name("NewOldColumn");Re: 式、列参照、数式、列名の変更についてサポートが必要です個人的に気に入って使っているのが、 JSL 引用()構文の強調表示と字句解析を維持する関数 -- その後、値を:名前()指令そのもの
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Parse( Eval Insert( JSL Quote(
dt << New Column( "NewColumn", Formula( :Name("^oldCol^") ) )
) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Re: 式、列参照、数式、列名の変更についてサポートが必要ですはい、基本的には以下で示したのと同じアプローチですが、使用するのは代わりのそれ以外の評価インサート、 右?
Re: 式、列参照、数式、列名の変更についてサポートが必要ですわかりました、分かりました。 式の部分には、次のチェーンを使用するだけです。
Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#"))))実際のスクリプト式では実際に「^」が使用される REgEx を使用するため、startChar="#" を使用する必要がありました。
完全なスクリプトは次のとおりです。
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#")))) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");このように式は:古い列それよりも列として("OldColumn")また、数式を壊すことなく列の名前を安全に変更できるようになりました。
Re: 式、列参照、数式、列名の変更についてサポートが必要ですこれが私にとって効果的なアプローチの1つです。複雑な JMP 列名を処理できるように名前付けを拡張しました。これにより読者は少し混乱しますが、この方法はより強力になります。
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn+one", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names( string ))[1];
//oldCol = "OldColumn";
//Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Eval(
Substitute(
Expr(
dt << New Column( "NewColumn", formula( __oldCol__ ) )
),
Expr( __oldCol__ ), parse(":\!"" || oldCol || "\!"n")
)
);
Column( oldCol ) << Set Name( "NewOldColumn" );
Re: 式、列参照、数式、列名の変更についてサポートが必要ですそれを行う方法が 1 つあると思います (ただし、この方法では行わないでください)。
列名を文字列としてではなく参照として取得し、単に使用します名前 Expr() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
しかし、私はすでに列の名前を文字列として持っているので、それを使いたいと思います。