すべてのデータが欠落している場合に、可変の列番号の行を削除するにはどうすればよいですか自動生成されたデータセットがあり、一部の列 (部分文字列「X_Clean」を含む列) にはいくつかの null 値が含まれます。データセットによっては、2、3、4、または 5 つの異なる列が存在する場合もあります。これらの「X_Clean」列のすべての「n」に null 値がある場合にのみ行を削除したいのですが、少なくとも 1 つの列に値が設定されている場合は行を削除しません。
FOR ループを実行して対象の列リストを生成することを考えていましたが、これは機能します。
col_list = dt <<GET column="" names="">0, i--,
if(!contains(col_list[i], "X_Clean"),
remove from(col_list, i);
));</GET>しかし、それでは次のステップがわかりません。個々の列ごとに別の FOR ループを実行することはできないため、これらすべての列の値を要約し、null の場合は削除する必要があります...または何か他のことを行う必要がありますか?
これは私のテーブルの例です。この場合、日付の 3 行目のみが削除の対象となります。
| 実在物 | 2X_クリーン | 3X_クリーン | 4X_クリーン |
| あ | 1 | 3 | 6 |
| B | | 4 | 5 |
| あ | | | |
| B | 4 | 1 | 3 |
| あ | 3 | 4 | 4 |
| 6 | 1 | 1 | 0 |
特定の列をハードコーディングできた場合の方法を次に示します。ただし、列が異なるためハードコーディングできません。
dt << Select Where(Is Missing(:Name( "2X_Clean" ) | :Name( "3X_Clean" ) | :Name( "4X_Clean" )))<<DELETE rows=""></DELETE>
何か案は?ありがとう!
Re: すべてのデータが欠落している場合、可変列番号の行を削除するにはどうすればよいですかありがとう、ジム。
Re: すべてのデータが欠落している場合、可変列番号の行を削除するにはどうすればよいですかこれは私のせいだ。数字で始まる列は JMP を混乱させることを認識すべきでした。列名への参照の周りに :Name() 関数を追加しました。
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = N Items( col_list ), i > 0, i--,
If( !Contains( col_list[i], "X_Clean" ),
Remove From( col_list, i )
)
);
theExpr = "dt << select where(isMissing(Sum(:name(\!"" || col_list[1];
For( i = 2, i <= N Items( col_list ), i++,
theExpr = theExpr || "\!"),:name(\!"" || col_list[i]
);
theExpr = theExpr || "\!")))==1)<<DELETE rows=""></DELETE>
Re: すべてのデータが欠落している場合、可変列番号の行を削除するにはどうすればよいですかジム、これは興味深い話題ですね。 添付のようにデータテーブルを開いて次のjslを実行すると、すべてのnull行を削除できないようです。 なぜ?
dt =現在のデータテーブル() ;
theExpr = "dt << select where(isMissing(Sum(:" ||列リスト[ 1 】 ;
ために(私= 2 、私<= N 個のアイテム(列リスト) 、私++、
theExpr = theExpr || ",:" ||列リスト[私】
) ;
theExpr = theExpr || "))==1)<<行を削除;" ;
評価(解析する( theExpr ) ) ;
Re: すべてのデータが欠落している場合、可変列番号の行を削除するにはどうすればよいですか必要なことは、目的を達成するために実行する必要がある動的コードであるリテラル文字列変数を構築し、構築したらそれを実行することだけです。以下のコードは、それを行う方法のサンプルです
theExpr = "dt << select where(isMissing(Sum(:" || col_list[1];
For( i = 2, i <= N Items( col_list ), i++,
theExpr = theExpr || ",:" || col_list[i]
);
theExpr = theExpr || "))==1)<<DELETE rows=""></DELETE>