我有一个大型数据集,其中包含大约 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);