在现有列中创建并填充基于类别的新列你好,
我正在尝试构建一个快速查询,其中使用分类列(test_article)创建一系列仅包含信息子集的列。 如果脚本按预期工作,表格最终会出现 2 个新列(PBS 与 ...)。
| 测试文章 | 测量 | PBS 对比 709547 | PBS 对比 709139 |
| 公共广播公司 | 1.23 | 公共广播公司 | 公共广播公司 |
| 公共广播公司 | 1.456 | 公共广播公司 | 公共广播公司 |
| 709547 | 4.56 | 709547 | 排除 |
709139 | 5.02 | 排除 | 709139 |
| 709139 | 6.02 | 排除 | 709139 |
| 709547 | 4.57 | 709547 | 排除 |
我尝试过以下脚本:
NamesDefaultToHere(1);
dt=current data table();
row = Associative Array( :test_article ) << Get Keys;
nc=N items (row);
For( i = 1, i <= nc, i++,
new column("PBS vs "|| row[i],"Character", "Nominal", Formula(If( :test_article == "PBS", :test_article,
If( :test_article == row[i],
"test",
"EXCLUDE"
)
))));不知何故,它不会在新列中填充任何值(“PBS”除外)。
有什么建议么?
多谢
塞巴斯蒂安
回复:在现有列中创建并填充基于类别的新列也像魅力一样发挥作用。
多谢回复:在现有列中创建并填充基于类别的新列奇迹般有效!
谢谢回复:在现有列中创建并填充基于类别的新列您需要将 row[i] 的值代入公式中。 JMP 不会计算 New Column() 消息的 Formula() 部分内的表达式。
您可以使用代替()将 row[i] 的实际值代入公式中。
Names Default To Here( 1 );
dt = Current Data Table();
row = Associative Array( :test_article ) << Get Keys;
nc = N Items( row );
For( i = 1, i <= nc, i++,
Eval(
Substitute(
Expr(
New Column( "PBS vs " || row[i],
"Character",
"Nominal",
Formula( If( :test_article == "PBS" | :test_article == ri, :test_article, "EXCLUDE" ) )
)
),
Expr( ri ), Eval( row[i] )
)
)
);
回复:在现有列中创建并填充基于类别的新列您遇到的主要问题是,在公式的定义中,不能有需要评估的项目。JMP 认为只有在执行公式时才会评估公式定义中的所有内容。
因此,传递到新列定义中的公式的语法必须完整。下面的代码修改适用于您的示例数据表。
Names Default To Here( 1 );
dt = Current Data Table();
row = Associative Array( :test_article ) << Get Keys;
nc = N Items( row );
For( i = 1, i <= nc, i++,
Eval(
Parse(
"New Column( \!"PBS vs " || row[i] ||
"\!",
Character,
Nominal,
Formula(
if (Row() == 1, theTest = \!""
|| row[i] ||
"\!");
If( :test_article == \!"PBS\!",
zip=:test_article,
If( :test_article == theTest,
zip=\!"test\!",
zip=\!"EXCLUDE\!"
)
);
zip
)
)
);"
)
)
);
