如何处理缺失数据<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我需要对大量列进行描述性分析。 为此,我编写了以下脚本:
dt = 当前数据表();
column_names = dt << 获取列名称(数字,字符串);
for(i=3,i<=NItems(列名),i++,
colName = 列名;
cmd = 表达式(
ow = dt << 分布(
连续分布( 列( cName ) ),
其中(:性别==“F”)
);
owr = ow<<报告;
);
代入(cmd,Expr(cName),colName);
评估(cmd);
);
当前日志() << 保存 HTML(".....\test.htm");
现在,当我运行它时,我在日志窗口中收到一条错误消息“一个或多个列除了缺少值之外什么都没有。”。
我有一些列的所有值或仅特定“性别”的值都缺少数据。 我如何在循环中检查它并在分析中跳过它们?
谢谢
回复:如何处理缺失数据亲爱的女士,
最后一个脚本完美运行。 在这次讨论中我学到了很多东西。
再次感谢您的所有指导。
回复:如何处理缺失数据堆栈只是将数据排列在单列中的中间步骤。 错误可能是标签或数据列没有获得摘要命令在此处假定的名称“Position”和“Data”。 去掉“不可见”选项并查看堆叠表以查看列名称,如果某些内容未按预期命名(如堆叠数据列(“数据”)参数上方的 jsl 注释中所述,则相应地更改摘要)如果列按照原始表中的方式进行分组,则在 JMP 10 中将被忽略,因此取消分组命令(在上面的示例中)。
如果行为不当,您可以使用汇总和转置来代替堆栈来获得类似的结果。 尝试下面的示例(适用于发布的表“示例”)。
dt =数据表( “例子” ) ;
列名= dt <<获取列名称(数字) ;
( dt <<概括(
团体( :性别) ,
意思是(评估(列名) ) ,
统计列名格式( “柱子” )
)) <<转置(标签( :性别) ,输出表( “结果” ) ) ;
回复:如何处理缺失数据亲爱的女士,
非常感谢您提出这个新方法。 我认为它更快、更有效。 但是,当我运行脚本时,出现如下错误:
在“错误论点”的访问或评估中找不到列
Send 在访问或评估 'Send' 时需要可编写脚本的对象,dt_stacked << Summary( Group( :Position ), Mean( :Data ), Subgroup( :SEX ) )
在以下脚本中,错误标记为 /*###*/
::dt = 数据表( "示例" );
::column_names = ::dt << 获取列名称( numeric );
::dt_stacked = ::dt << 堆栈(
列(::列名),
源标签列(“位置”),
堆叠数据列(“数据”),
无形的
);
::dt_sum = ::dt_stacked << /*###*/Summary(
组(:位置),
平均值(:数据),
子组(:性别)
) /*###*/;
Column( 3 ) << set name( "女" );
Column( 4 ) << 设置名称( "男" );
dt_sum << 新列( "比率", 公式( 女 / 男 ) );
dt_stacked << 关闭窗口;
创建堆栈时似乎有些不对劲。 您知道为什么会出现这样的错误吗?
再次感谢您的所有帮助。
回复:如何处理缺失数据如果将脚本应用于上面发布的示例表,我不会收到该消息。 然而,owr[NumberColBox(4)];给出错误,因为它不存在。 到目前为止,代码仅给出“F”的结果,而不给出“M”的结果,我假设您也想在结果表中列出。
如果您的唯一目标是总结,则意味着我会使用 Summary() 函数,而不是循环遍历大量分布报告。
一个例子:
dt =数据表( “例子” ) ;
列名= dt <<获取列名称(数字) ;
dt <<取消列分组(列名) ; // JMP 10 中出现堆叠数据列名称和分组列的错误
dt_stacked = dt <<堆(
列(列名) ,
源标签列( “位置” ) ,
堆叠数据列( “数据” ) ,
无形的
) ;
dt_sum = dt_stacked <<概括(
团体( :位置) ,
意思是( :数据) ,
子群( :性别)
) ;
柱子( 3 ) <<设置名称( “女性” ) ;
柱子( 4 ) <<设置名称( “男性” ) ;
dt_sum <<新专栏( “比率” ,公式(女性/男性) ) ;
dt_stacked <<关闭窗口;
回复:如何处理缺失数据我更改了脚本如下:
dt = 数据表(“示例”) ;
column_names = dt << 获取列名称(数字,字符串);
结果=新表(“结果”,可见,
新列(“位置”,字符),
新列(“女性”,数字),
新列(“男性”,数字),
新列(“比率”,公式(女性/男性)),
添加行(NItems(column_names))
);
for(i=1,i<=NItems(列名),i++,
If( N Row( dt << 获取行 where( And( :SEX[] == "F", !Is Missing( Column( column_names ) )[] ) ) ) ),
colName = 列名;
cmd = 表达式(
ow = dt << 分布( 连续分布( 列( cName ) ),
其中(:SEX ==“F”));
owr = ow<<报告;
allmean= owr[NumberColBox(2)];
Fmean = allmean[1];
allmean1= owr[NumberColBox(4)];
Mmean = allmean1[1];
列(结果,1) = 列名;
列(结果,2) = F均值;
列(结果,3) = M均值;
ow << 关闭窗口;
);
代入( cmd, Expr( cName ), colName );
评估(cmd);
)
);
结果<<期刊;
现在我在日志窗口中收到此消息
“找不到列{1}
在访问或评估“Column”时,Column(column_names )”
它指的是这一行:
":SEX[] == "F" & !Is Missing( Column/*###*/(::column_names[::i])[] )"
感谢您的建议
回复:如何处理缺失数据我认为该错误是由于放错位置引起的
dt = 当前数据表()
它将新表“结果”而不是原始表分配给 dt 。 结果没有名为 :SEX 的列
尝试 dt = data table("Example") 代替。
回复:如何处理缺失数据亲爱的女士,
感谢您的指导。 我添加了您建议的代码,并修改了我的脚本以将结果导出到表中,如下所示:
结果=新表(“结果”,可见,
新列(“位置”,字符),
新列(“女性”,数字),
新列(“男性”,数字),
新列(“比率”,公式(女性/男性)),
添加行(NItems(column_names))
);
dt = 当前数据表();
column_names = dt << 获取列名称(数字,字符串);
for(i=1,i<=NItems(列名),i++,
If( N Row( dt << 获取行 where( And( :SEX[] == "F", !Is Missing( Column( column_names ) )[] ) ) ) ),
colName = 列名;
cmd = 表达式(
ow = dt << 分布( 连续分布( 列( cName ) ),
其中(:SEX ==“F”));
owr = ow<<报告;
allmean= owr[NumberColBox(2)];
Fmean = allmean[1];
allmean1= owr[NumberColBox(4)];
Mmean = allmean1[1];
列(结果,1) = 列名;
列(结果,2) = F均值;
列(结果,3) = M均值;
ow << 关闭窗口;
);
代入( cmd, Expr( cName ), colName );
评估(cmd);
)
);
结果<<期刊;
现在,当我运行它时,它给我一个 SEX 错误。 我附上了我的数据文件示例以供测试。
在此先感谢您的帮助。
回复:如何处理缺失数据有几种方法可以做到这一点(像往常一样)。 以下是一种应该有效的方法。
dt =当前数据表() ;
列名= dt <<获取列名称(数字,细绳) ;
为了(我= 3 ,我<= N 项(列名) ,我++,
// 如果在 SEX="F" > 0 的第 i 列中没有缺失,则执行操作,否则下一个 i
如果( N 行( dt <<获取行,其中(和( :性别[] == “F” , !不见了(柱子(列名[我] )[] ) ) ) ) ,
列名=列名[我] ;
指令=表达式(
噢= dt <<分配(连续分布(柱子(别名) ) ,在哪里( :性别== “F” ) ) ;
奥尔=噢<<报告;
) ;
代入(指令,表达式(别名) ,列名) ;
评估(指令) ;
)
) ;
当前期刊() <<保存 HTML ( “.....\test.htm” ) ;