私は約30列の時代遅れの財務エントリを含む大規模なデータセットを持っています。 どの列が最初の列がゼロでないかを知りたい(データが欠落している列はありませんが、最初の列には正の値のエントリが必要です)。 4つの時間列と5つ目の列からなる小さな構成例を添付して、計算式の結果を示します。 ゼロ値が欠落している場合は、Number(欠けていない値の数)の関数を使用して必要な値を取得できますが、欠けているデータとゼロ値がないと、どの列が識別されるのかを自動的に特定する方法はわかりません。最初のものは正の値です。 任意のアイデアが高く評価されます。
@dale_lehman 、
ここにあなたの問題に対する考えと解決策のカップル。
アプローチ1:前のソリューションのJSLを続けてテーブルに追加する
dt = Current Data Table();
Mat = dt << Get As Matrix;
DesList = list();
for(i = 1 , i <= N Rows(Mat), i++,
Pos = Min(Loc(Mat[i,0]));
Insert Into(DesList,Pos);
);
dt << New Column("Test",Numeric,Continuous,<< Set Values(DesList));
// Please note that there will be "." missing value if none of your columns have a positive value
アプローチ2:JSLで式をスクリプト化してテーブルに適用する - ちょっとしたラウンドアバウト - しかしスケーラブル - 古いが関連性のある例 - その日のうちに編集する
for(i = 1, i <= N Items(InvColNames), i++,
If(i == 1,
Stmt = ":" || InvColNames[i] || " >= 1 &" || ":" || InvColNames[i] || " <= InvLimit" ;
,
Stmt = Stmt || " & " || ":" || InvColNames[i] || ">= 1 &" || ":" || InvColNames[i] || " <= InvLimit" ;
) ;
);
Eval( Parse( Eval Insert("\[ dt_Inp << New Column("Status_Inv",Numeric,Continuous,Formula(^Stmt^)); ]\" ) ) );
アプローチ3:手動でこのようなことをする - これのファンではないが、自分で代替案を見つけることはできない - おそらく他の人たちはより良い考えを持つだろう
If(
:Column 1 > 0, "Column 1",
:Column 2 > 0, "Column 2",
"No Positive"
)
ありがとう - これは確かに私が欲しいものを計算します、しかし私はもう少し助けが必要です(私のほとんど存在しないJSL能力のため)。 ログウィンドウに正しい計算が表示されますが、新しい列のために式ウィンドウにスクリプトを入力すると、空白の値が表示されます。 私が受ける警告はShow()関数に関するものです。 計算結果を新しい数式列に表示する方法を教えてください。
@dale_lehman 、
たぶんこれを試して?
dt = Current Data Table();
Mat = dt << Get As Matrix;
DesList = list();
for(i = 1 , i <= N Rows(Mat), i++,
Pos = Min(Loc(Mat[i,0]));
Insert Into(DesList,Pos);
);
Show(DesList);