使用 For 循环创建新列你好
我尝试使用 for 循环创建新列
names default to here (1);
dt = current data table ();
summarize (PN=by (:Name("~DEVICE TYPE" )));
for (i=1, i <= N items(PN), i++,
new column("Cnt "||PN[i],
formula(If( :Name( "~DEVICE TYPE" ) == PN[i],
If( :SERIAL_NO || :TIME_DATE == Lag( :SERIAL_NO || :TIME_DATE, -1 ),0,1)
))));
我可以创建新列,但无法使公式发挥作用。 日志文件显示以下错误消息。
Column Cnt TRB100BC-08 Formula Interrupted
Subscript Range 1 times At rows: 2 Operation: PN[i], PN[/*###*/i]
Formula evaluation errors have been ignored
回复:使用 For 循环创建新列谢谢回复:使用 For 循环创建新列您遇到的主要问题是 New Column() 函数中的 Formula 元素在处理前不会进行计算,因此,它将放入您的规范 PN[i] 的公式中,并且由于循环时变量“i”正在更改更改您正在创建的每一列的公式都会发生变化。所以你要做的就是将公式更改为静态值。也就是说,您不希望安装的公式具有 PN[i],而是希望具有 PN[i] 的实际评估值。Substitution() 函数允许这种情况发生。我认为下面的脚本会做你想要的
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( PN = by( :Name( "~DEVICE TYPE" ) ) );
PN={"X"}
For( i = 1, i <= N Items( PN ), i++,
Eval(
Substitute(
Expr(
New Column( __name__,
formula(
If( :Name( "~DEVICE TYPE" ) == __PN__,
If(
:SERIAL_NO || :TIME_DATE ==
Lag( :SERIAL_NO || :TIME_DATE, -1 ),
0,
1
)
)
)
)
),
Expr( __name__ ), "Cnt " || PN[i],
Expr( __PN__ ), PN[i]
)
)
);