用于删除同一类别中所有缺失值的列的 JSL 实现在附件文件中,“商店”字段被分为两个商店 A 和 B。如果同一商店所在列的所有单元格都为空,则删除整列,如附件“预期结果”所示。如何使用 JSL 实现此功能?
我能够统计每一列中的缺失值,但我找不到方法来验证同一门店对应的所有单元格是否都为缺失值。您有什么好的方法吗?由于实际上有很多列——数万列——使用耗时的计算方法会花费太长时间。
自动化和脚本编写回复:关于使用 JSL 实现按类别删除所有缺失值的列为什么保留了“香蕉价格”和“榴莲价格”?所有“A”项中的“香蕉价格”都缺失,所有“B”项中的“榴莲价格”也都缺失。
回复:关于使用 JSL 实现按类别删除所有缺失值的列你好,
我严格按照你的规则设计了一个非脚本选项。但是,正如@mmarchandFSLR指出的那样,结果将与你的“结果”不符,因为香蕉和榴莲会被排除/删除。
1)将所有列堆叠起来(参见附件示例)
2)使用以下公式:
Col Sum( Is Missing( :Data ), :Store, :Label ) / Col Sum( 1, :Store, :Label )
3) 添加一个名为“要删除的行”的主检查列,公式如下:
Col Max( :MISSING by STORE PCT, :Label )
4)删除标记的行
5)按“标签”拆分结果表。
最好的,
TS
回复:关于使用 JSL 实现按类别删除所有缺失值的列我建议你创建一个类似这样的表格。

然后,您可以通读表格,并构建一个列表,列出满足每个需要删除的商店的 N 与 N Missing 要求的列。
以下是一个创建表格的示例脚本
names default to here(1);
dt=data table("Fruite Price");
colNames = dt << get column names(continuous);
dtMissing = dt << Summary( invisible,
Group( :Store ),
N Missing( colNames ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
output table name( "N Missing" )
);
dtStack = dtMissing << Stack( invisible,
columns(
colNames
),
Source Label Column( "Product" ),
Stacked Data Column( "N Missing" ),
Output Table( "Stack of N Missing" )
);
dtEval = dtStack <<
Split(
Split By( :Store ),
Split( :N Missing, :N Rows ),
Group( :Product ),
Output Table( "Eval Table" ),
Sort by Column Property
);
您可以使用 Tabulate 平台创建表格,但您提到表格有数千列。我认为 Tabulate 在这种情况下可能不太适用,不过上面的脚本应该可以处理。