如何處理缺失數據<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” ) ;