将两列的值合并为一列(混合数字和字符值)你好
我有两列,一列包含数值,一列包含字符串。
我想创建第三列,如果字符串值是“参数”,则采用数值,如果不是,则采用字符串值。
我尝试了这个,但是我收到一个错误“列 TEST_RESULT 需要数字值”,尽管它被定义为字符类型列。
如果有必要的话我会使用 JMP15。
col_test_result =dt <
<NEW column=""></NEW>
Later on I want to split this column so the output table will have either numeric or character type data, will JMP be able to set it to numeric based<BR />on the contents although the source column was character?
<BR /><BR />
<LINGO-LABS id="lingo-labs-536312" slang="en-US" mode="UPDATE">
<LINGO-LABEL>高级统计建模</LINGO-LABEL>
<LINGO-LABEL>内容组织</LINGO-LABEL>
<LINGO-LABEL>数据混合和清理</LINGO-LABEL>
<LINGO-LABEL>大规模定制</LINGO-LABEL>
<LINGO-LABEL>质量与工艺工程</LINGO-LABEL>
<LINGO-LABEL>分享和交流结果</LINGO-LABEL>
</LINGO-LABS>
回复:将 2 列中的值合并为一列(混合数字和字符值)您需要使用 Char() 函数将数字数据转换为字符
col_test_result = dt << New Column( "TEST_RESULT", Character );
dt_subset:TEST_RESULT << set formula( If( :COMMENTS == "Parametric", Char( :NUMERIC_RESULT ), :COMMENTS ) );
回复:将 2 列中的值合并为一列(混合数字和字符值)不能在一列中包含混合值。 如果这些是数值,您可以在 :NUMERIC_RESULT 周围添加 Char()
Column(dt_subset, "TEST_RESULT") << set formula(If(:COMMENTS == "Parametric", Char(:NUMERIC_RESULT), :COMMENTS));
当您拆分列时,只需将数据类型设置为您想要的。 请注意,如果您在数字列中有字符值,这些值将被更改为缺失。
回复:将 2 列中的值合并为一列(混合数字和字符值)谢谢 !添加 'char()' 解决了第一个问题。
但是现在 - 在拆分合并的列之后,我还有另外两个问题。
我将其拆分为另一列,因此生成的列都有一种类型的数据(字符串或数字),大约有 150 个不同的列。
问题:
1.所有拆分列仍然使用合并列的原始公式。 如何使源列成为一个值(如在 excel 中 - 粘贴特殊值)。
2.所有的拆分列都是作为字符类型生成的,这不是我想要的,我希望它们根据它们的内容得到自动类型,就像
当我打开 csv 文件时 - JMP 会自动设置类型,因此如果列中的所有值都是数字,它将获得数字类型。
回复:将 2 列中的值合并为一列(混合数字和字符值)这是一小段代码,它将遍历数据表并将由所有有效数值组成的任何字符列转换为数字数据类型;
Names Default To Here( 1 );
dt = Current Data Table();
For Each( {value, index}, dt << get column names( string ),
If( Column( value ) << get data type == "Character",
vals = Column( value ) << get values;
nonMissing = Col Number( As Column( value ) );
Column( value ) << set data type( numeric ) << modeling type( continuous );
If( nonMissing != Col Number( As Column( value ) ),
Column( value ) << set data type( character ) << set values( vals )
);
)
);回复:将 2 列中的值合并为一列(混合数字和字符值)谢谢 !这看起来正是我需要的,但不幸的是它不起作用。
我试图调试 - 第一行正在工作 - 获取列名列表。
第二个得到以下错误。任何想法?

回复:将 2 列中的值合并为一列(混合数字和字符值)就像评论一样:
这不是限制,而是 JMP 的基本思想是每列都有定义的数据类型,您可以根据需要主动设置。
数据类型一旦设置正确,就可以很容易地执行以下分析。
回复:将 2 列中的值合并为一列(混合数字和字符值)我认为您使用的是 < 版本 16,因此您必须使用 std "For" 语法,请参阅
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// JMP16 "For Each"
dt << get column names( string );
For Each( {value, index}, dt << get column names( string ), Print( value ) );
// JMP <16 "For"
col_lst = dt << get column names( string );
For( i = 1, i <= N Items( col_lst ), i++,
Print( col_lst[i] )
);
回复:将 2 列中的值合并为一列(混合数字和字符值)
谢谢它现在工作!
现在只有一件事 - 我如何摆脱原来的公式? 我只想要公式的结果值,有可能吗?
回复:将 2 列中的值合并为一列(混合数字和字符值)
很好的工作.. 我发现了一个问题。 有一列具有 'char' 数据类型的列具有固定的字符串内容:“R001”
运行脚本后,它变为数字类型,值为“1”。 为什么会这样?
回复:将 2 列中的值合并为一列(混合数字和字符值)JMP 将后跟全数字值的 R 解释为货币。南非兰特符号的格式为:R123 或 R55.67 等。因此 JMP 将其解释为数值。您可以在代码中添加检查以检查此异常。
回复:将 2 列中的值合并为一列(混合数字和字符值)
哇,我没有看到这个:)非常感谢你的帮助!
回复:将 2 列中的值合并为一列(混合数字和字符值)JMP 17 将为 num("R001", <<限制) 以防止这种行为。