在公式中使用 FOR 循环创建新列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,我有一个关于如何将表中创建的许多列组合成一个新列的问题,该列描述这些列中的任何一个是否具有特定的 char 值(“已筛选”)。
目前,我的数据集使用脚本进行分析,该脚本根据脚本中的公式添加“n”个新列,其中包含“已筛选”和“未筛选”的字符值。
我的目标是在脚本中包含一个最后一步,该步骤添加一个新列,该列评估每个“n”个新列中的值,如果对于每一行,这些列中的任何一个都被“筛选”,那么它将该行标记为已筛选.
如果新列的数量始终相同,我将只编写一个较长的 If 语句,检查每列中的值。 但是,我需要编写脚本来查看“n”个列。 我想在论坛中使用 FOR 循环,例如:
dt << New Column("All_screens",character,nominal,setformula(
If( For( i = 1, i <= N 项(单个屏幕列)、个人屏幕列== "Screened"), ---> 需要一些魔法,如果任何筛选列包含 screen,那么 ---> "Screened", "Unscreened" ) );
但由于 FOR 循环不返回任何值,我无法弄清楚这个魔法。 有人有想法吗?
谢谢,
- 桃
回复:在公式中使用 FOR 循环创建新列跨列公式中未知数量的列的逐行操作的实现不是很简单(但不需要魔法)。
以下是一些利用局部变量的想法:
// 只是一个示例表
n = 5 ;
天然橡胶= 10 ;然而
dt =新表( 《筛选总结》 ,添加行(天然橡胶) ,添加多列( “X” , n ,特点)) ;
为了(一世= 1 ,一世<= n ,一世++,
柱子( dt ,一世) <<设置每个值({ “筛选” , “未筛选” }[ 1 + (随机整数( 1 ,天然橡胶) > 1 )])
) ;
// 新列指示是否有任何列包含“screened”
dt <<新列( “筛选” ,
特点,
公式(
当地的({一世= 0 , n = N 科尔(当前数据表()) - 1 } ,
如果(包含(重复({一世++ ;柱子(一世)[]} , n ) , “筛选” ) ,
“筛选”
)
)
)
) ;
// 相同,但带有 For() 循环;不太整洁的代码,但对于大 n 可能比 Repeat() 更有效
// 因为没有建立中间列表
dt <<新列( 《放映2》 ,
特点,
公式(
当地的({一世, n = N 科尔(当前数据表()) - 2 , s = “” } ,
为了(一世= 1 ,一世<= n ,一世++,
如果(柱子(一世)[] == “筛选” ,
s = “筛选” ;
休息() ;
)
) ;
s ;
)
)
) ;
// 或者,返回 nr of "screened"
dt <<新列( “筛选人数” ,
数字,
公式(当地的({一世= 0 , n = N 科尔(当前数据表()) - 3 } ,和(重复({一世++ ;柱子(一世)[] == “筛选” } , n )))) ) ;
回复:在公式中使用 FOR 循环创建新列谢谢吉姆。因为我不知道列数,所以我会尝试使用 for 循环将您的方程放入 expr() 中,然后使用 for 循环中生成的表达式的 eval() 将其移至 if 语句.
回复:在公式中使用 FOR 循环创建新列我使用布尔求和来解决您正在谈论的问题。如果您有 4 列 a、b、c、d,我使用的公式为:
if(sum(a=="screened",b=="screened",c=="screened",d=="screened")>0, "screened","")