こんにちは、みんな、
複数の列を含むデータテーブルがあり、その一部を一緒に追加したいと考えています。 スクリプトの一部として、いくつかの列を選択し、列名をリストに保存し、「合計」機能を使用して選択した列を追加したいと考えています。
そのためには、文字列「:DATA1, :DATA2, :DATA3」を構築し、それを列で解析する必要があります。
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
私が使用しているコードのスニペットは以下のとおりです。
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
list = {"DATA1", "DATA2", "DATA3"};
For( i = 1, i <= N Items( list ), i++,
If(
i == 1, string = ":" || Char( Eval( list[Eval( i )] ) ),
i > 1, string = string || "," || ":" || Char( Eval( list[Eval( i )] ) )
)
);
Parse( string );
実行すると、次のエラーが表示されます。
予想外の「、」。 おそらく「;」が欠落している可能性があります。また "、"。
1行目7列目: :DATA1►,:DATA2,:DATA3
無視された残りのテキストは、
,:DATA2,:DATA3
:DATA1
何か足りないものはありますか?
前もって感謝します!
助けてくれて、説明してくれてありがとう! スクリプトの「Yet Another Data」列は、まさに私が望んでいることを行います。 「別のデータ」列は、「引数はスカラー、行列、またはリストである必要があります。」というエラーとともに空のセルを返しているようです。 なぜこれが起こっているのかを調べてみます。
返される文字列を見てください。
「:DATA1、:DATA2、:DATA3」
引用符なしでそのまま実行してみると、同じ結果が得られます。
列名を文字列として持っている場合は、次のようなことができます。
Names default to here(1);
dt = New Table( "Example",
Add Rows( 1 ),
New Column( "Data1", Set Values( [1] )),
New Column( "Data2", Set Values( [2] )),
New Column( "Data3", Set Values( [3] )),
);
// list of column names as strings
list = dt << Get Column Names("string"); // {"Data1", "Data2", "Data3"}
SumExpr = Expr(Sum());
for(i=1, i<=nitems(list), i++,
insert into(SumExpr, Column(dt, list[i]));
);
// see what the sumExpr looks like
show(nameexpr(sumExpr));
// then you have to do some substitute in order to actually get it to run
just_for_show = EvalExpr(
dt << New Column("Another Data", Formula(Expr(nameexpr(SumExpr))));
);
show(nameexpr(just_for_show));
just_for_show();// this will actually run the expression you just created.
// or you could use the list in Sum Directly.
// list of column names as references
list = dt << Get Column Names();
list=list[1::3];
// can do a list directly in Sum()
// should still substitute it in so it's no dependant on then list variable
just_for_show =Substitute(
Expr(
dt << new Column("Yet Another Data", Formula(Sum(DV_LIST)))
),
Expr(DV_LIST), list
);
show(nameexpr(just_for_show));
just_for_show(); // actually evaluates again.