JSL: 変数列名を使用した式の作成こんにちは、
私は実際に単純なことをしたいと思っています(少なくとも私はそう思っていました)。つまり、変数列名を含む数式を持つ JSL を使用して新しい列を作成します。 すでにコマンド「column、as column、name、as name、eval、parse ..」のいくつかの組み合わせを試し、フォーラムも検索しましたが、試したすべての結果は、数式を評価できないというエラーになります。
私がやりたいことの例:
「列 1」はデータテーブルの列です。
a = "column 1";
new column("test", formula(a*2));
列「test」には、「列 1」に 2 を乗算する数式が含まれている必要があります。
助けてくれてありがとう、
ダーラ
Re: JSL: 変数列名を使用した式の作成有効な解決策を考え出そうとした後、最終的にあきらめて、JMP サポートにこれを行う方法を尋ねました。 Wendy が親切に重要な行を教えてくれたので、デモとして for ループに埋め込みました。私が含めるコードは、現在のデータ テーブルに abc と def という名前の 2 つの列があり、それらに選択したデータの数行が含まれていることを前提としています。ところで、ウェンディ・マーフリーとローズマリー・ルーカスによる『Jump into JMP Scripting』という SAS Press の新しい本があり、これはスクリプトに関する非常に役立つ本です。例で使用されている Expr と Eval Expr については説明します。
dt = Current Data Table();
cols = {abc, def};
nlist = N Items(cols);
For( i = 1, i <= nlist, i++,
newColExpr = Expr(
dt << New Column( char(cols[i])||"*2", Numeric, Formula( Expr( cols[i] ) * 2 ) )
);
Eval( Eval Expr( newColExpr ) );
)Re: JSL: 変数列名を使った数式の作成時々、最も単純なことでも JSL では驚くほど難しくなることがあります 
ここではいくつかのアプローチを紹介します。
new column("test",formula( as column("column 1")*2 ));
または
a = "column 1";
new column("test",formula( a[]*2 ));
構文のロジックは次のようになります。最初の例では、「列1」を数値の列として扱います。2番目の例では、「[]」はaが数値の配列であることを示します。
これが役に立つことを願っています
Re: JSL: 変数列名を使った数式の作成回答ありがとうございます。しかし残念ながら役に立ちませんでした。
最初のアプローチは、列名を変数から取得する必要がある (変更される可能性がある) ため、私が望んでいたものではありません。
2つ目の方法は、JMPが式に実際の列名を挿入しないため、うまくいきません。式を変更するためのダイアログを開くと、提案では「a[Empty()] * 2」と表示されますが、実際には「:Column1 * 2」のような式が必要です。
他に何か提案はありますか?Re: JSL: 変数列名を使った数式の作成2 番目の例は次のようになると思います。
a = Column("column 1");
new column("test",formula( a[]*2 ));
Re: JSL: 変数列名を使った数式の作成@mpb: うまくいきました!見つけてくれて、本を教えてくれてありがとう!Re: JSL: 変数列名を使った数式の作成ありがとうございます。うまくいきました!Re: JSL: 変数列名を使った数式の作成追加の質問がまだあります:
最終的にやりたいのは、リストの各項目に新しい列を作成することです。Stigの解決策では、列の計算式は依然として変数「a[]」に依存しており、(私が望むように)列名「列1」には依存していません。そのため、以下のスクリプトでは、計算された列の値も変更せずに「a[]」を変更することはできません。つまり、以下のアプローチは機能しません(collistの長さと列名は変更される可能性があるため、ループ処理が必要です)。
collist = {"column 1", "column 2"};
for (k=1, k<=length(collist), k++,
a = Column(collist);
new column(concat("test",char(k)), formula( a[]*2 ));
);
式() ステートメントにリスト要素を直接挿入してもうまくいきません。他に何か提案はありますか?
ダーラ
Re: JSL: 変数列名を使った数式の作成次のコードを使用すると:
dt = Current Data Table();
a = Column("height");
dt << New Column("test1",formula(a[]*2));
a = Column("weight");
dt << New Column("test2",formula(a[]*2));
列 test1 と test2 は、両方の式が同じ変数 a を参照しているにもかかわらず、正しく計算されます。したがって、原則としてループ内のコードに問題は発生しないはずです。ただし、新しい列をテーブル内の計算列として動作させたい場合、このアプローチは機能しません。つまり、コードから式 ":column 1 * 2" を持つ列を生成する方法という疑問が残ります。
Re: JSL: 変数列名を使った数式の作成あ、前の投稿が完全に表示されていなかったことに今気づきました... 申し訳ありません。
はい、列の動作、あるいは少なくとも値を保持する必要があります。そのため、計算後すぐに数式を削除するというアイデアを思いつきました。しかし、「数式... -> クリア」と同じこと、つまり数式を削除して値をそのまま保持するステートメントが見つからなかったという問題がありました。この仕組みをご存知の方はいらっしゃいますか?
それは最も良い解決策ではないかもしれませんが、現時点では私にとってはこれで十分です。Re: JSL: 変数列名を使った数式の作成そこで、列の値をベクトルに読み取り、計算された値を新しい列に書き込むという回避策を講じました。
しかし、私はまだ未解決の質問に対する答えに興味があります。
ダーラ