我有一個大型資料集,其中包含大約 30 列有日期的財務條目。我想知道哪一列是第一個具有非零值(沒有列缺少數據,但我想獲取具有正值條目的第一列)值。我附上了一個小型的虛構範例,其中包含四個時間列和第五列,顯示了我希望公式產生的結果。如果零值缺失,我可以使用 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);