Missing("") 是否返回 True?我想区分一个空间单元格和一个空单元格。这不见了()函数将两者都解释为缺失。有没有更好的办法?
我正在使用 JMP 16.2.0。
New Table( "Example",
Add Rows( 1 ),
New Column( "Empty", Character, "Nominal", Set Values( {""} ) ),
New Column( "Empty Missing?",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Is Missing( :Empty ) )
),
New Column( "Space", Character, "Nominal", Set Values( {" "} ) ),
New Column( "Space Missing?",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Is Missing( :Space ) )
)
)其他回复: Missing(" ") 是否返回 True?谢谢@vince_faller和@txnelson .这不是我希望的答案,但它确实解释了这种行为。
回复: Missing(" ") 是否返回 True?添加到@vince_faller , JMP 在输入数据表时确实将“”转换为“”,但是,它不会将“a”转换为“a”。也就是说,当给定单元格中确实存在有效字符时,JMP 会保留前导空格(“20”十六进制)。JMP 还有用于输入空格(\!b)(“08”十六进制)和空值(\!0)(“”十六进制)的转义字符串。
回复: Missing(" ") 是否返回 True?空白只是“”,似乎 JMP 将空格的输入修剪为再次空白。
Names default to here(1);
dt = New Table( "Example",
New Column( "Fun", Character, Set Values( {" ", "", "A"} ) ),
New Column("State", character, Formula(
Match(:Fun,
"", "Blank",
" ", "Space"
, // else
"Filled"
)
))
);
dt:Fun << Get Values(); // {"", "", "A"}
至少在 16.2
我知道在早期版本中,您甚至无法对非数字执行 ismissing() 。
回复:Missing(“”) 是否返回 True?没什么可补充的。也许有个问题:
“那么,没有空间单元”——没有机会创建一个吗?
有趣的是,即使通过公式,空格也会转换为“”。
New Table( "Example",
Add Rows( 1 ),
New Column( "space and A", Character, "Nominal", Set Values( {" A"} ) ),
New Column( "Space", Character, "Nominal", Formula( Substr(:space and A,1,1) ) ),
New Column( "Space Missing?", Formula( Is Missing( :Space ) ))
);
Show("x"||Substr(:space and A[1],1,1) ||"x"); // sure, JSL doesn't lose the space
Show("x"||:space_v2 [1] ||"x") //automatically trimmed, even with a formula!
底线是,如果不可能创建空间单元,也许可以重塑谜题以便得到解决方案。
例如,不要占用空格并将其保存在单元格中 - 添加一个字符 - 然后检查它只是一个字符还是一个前面有空格的字符。
回复:Missing(" ") 返回 True 吗?我猜想,在将字符串保存到数据表时,字符串末尾的空格会自动删除?
因为它们很难检测(比检测前导空格难得多)。
一个简单的空格“ ”被视为尾随空格——极难被看到。
文档里有提到这条规则吗?我没找到……
有趣的是,这条规则甚至适用于列公式:末尾的空格会被直接删除。

dt = new table("test");
New Column( "input", Character, set values({"ABC","A B"}) );
New Column( "first 2 letters", Character, Formula( Substr( :input, 1, 2 ) ));
New Column( "length first_two_letters", Formula( Length( :first 2 letters ) ))