值标签我正在尝试使用 For 循环和 If 语句更改多个列中的值。不幸的是,虽然它可以正确创建新列,但第二列中的值出于某种原因也被复制到了第一列中。我遗漏了什么?
New Table( "Untitled 11",
Add Rows( 4 ),
New Column( "Column_1",
Character,
"Nominal",
Set Values( {"A1000", "A2000", "A3000", "A4000"} )
),
New Column( "Column_2",
Character,
"Nominal",
Set Values( {"B5000", "B6000", "B7000", "B8000"} )
)
);
OldColNames = { "Column_1", "Column_2" };
NewColNames = { "New_Column_1", "New_Column_2" };
nCols = N Items( OldColNames );
For( i = 1, i <= nCols, i++,
oldcol = OldColNames[i];
newcol = NewColNames[i];
New Column( newcol,
Character,
"Nominal",
Formula(
If(
"A10" <= Left( As Column( oldcol ), 3 ) <= "A19", "A-One",
"A20" <= Left( As Column( oldcol ), 3 ) <= "A29", "A-Two",
"A30" <= Left( As Column( oldcol ), 3 ) <= "A39", "A-Three",
"A40" <= Left( As Column( oldcol ), 3 ) <= "A49", "A-Four",
"B50" <= Left( As Column( oldcol ), 3 ) <= "B59", "B-Five",
"B60" <= Left( As Column( oldcol ), 3 ) <= "B69", "B-Six",
"B70" <= Left( As Column( oldcol ), 3 ) <= "B79", "B-Seven",
"B80" <= Left( As Column( oldcol ), 3 ) <= "B89", "B-Eight",
)
)
);
);谢谢!
高级统计建模消费者和市场研究数据访问数据混合和清理质量与工艺工程回复:价值标签这是因为名字旧科尔公式内部仅在运行公式时评估(解析),并且在创建列时不运行公式,而是稍后运行。在那之后,两列都指旧科尔,现在解析为同一列
要解决此问题,您需要在创建列时设置旧的 col 值,如下所示:
New Table( "Untitled 11",
Add Rows( 4 ),
New Column( "Column_1",
Character,
"Nominal",
Set Values( {"A1000", "A2000", "A3000", "A4000"} )
),
New Column( "Column_2",
Character,
"Nominal",
Set Values( {"B5000", "B6000", "B7000", "B8000"} )
)
);
OldColNames = { "Column_1", "Column_2" };
NewColNames = { "New_Column_1", "New_Column_2" };
nCols = N Items( OldColNames );
For( i = 1, i <= nCols, i++,
oldcol = OldColNames[i];
newcol = NewColNames[i];
Eval( Eval Expr(
New Column( newcol,
Character,
"Nominal",
Formula(
As Constant( col = As Name( Expr( old col ) ) );
If(
"A10" <= Left( col, 3 ) <= "A19", "A-One",
"A20" <= Left( col, 3 ) <= "A29", "A-Two",
"A30" <= Left( col, 3 ) <= "A39", "A-Three",
"A40" <= Left( col, 3 ) <= "A49", "A-Four",
"B50" <= Left( col, 3 ) <= "B59", "B-Five",
"B60" <= Left( col, 3 ) <= "B69", "B-Six",
"B70" <= Left( col, 3 ) <= "B79", "B-Seven",
"B80" <= Left( col, 3 ) <= "B89", "B-Eight",
)
)
);
) );
);在这里我使用评估(评估表达式(... 表达式(变量)...))构造以预先评估脚本的一部分,以及作为常数()仅对第一行进行评估,并为所有后续行保留该值(它可以通过防止名称查找时间来加速公式)
回复:价值标签出色的!太感谢了。