値が 1 つしかなく、文字列のバリエーションがない場合は、CHAR 列を削除します。すべての列を調べて、少なくとも 2 つの異なる値があるかどうかを確認し、単一値の列をすべて削除するスクリプトを作成する方法を知りたいですか? 数千の「機能」列があり、すべて文字型ですが、そのうちのかなりの数には 1 つのレコードしかありません...つまり、配布レベル = 1 です。
1 レコードの列を検出して削除するにはどうすればよいでしょうか?
自動化とスクリプトRe: 値が 1 つしかなく、文字列のバリエーションがない場合は CHAR 列を削除しますこれは、すべての文字列を検索し、リストの最後から最初に移動し、空白を数えない単一の値のみが見つかった場合はその列を削除する簡単なスクリプトです。
Names Default To Here( 1 );
dt = Current Data Table();
charCols = dt << get column names( string, character );
For( i = N Items( charCols ), i >= 1, i--,
Summarize( dt, bygroup = by( As Column( charCols[i] ) ) );
If( bygroup[1] == "",
Remove From( bygroup, 1, 1 )
);
If( N Items( bygroup ) <= 1,
dt << delete columns( Column( dt, charCols[i] ) )
);
);
Re: 値が 1 つしかなく、文字列のバリエーションがない場合は CHAR 列を削除しますJim と似た考え方 (summary を使用して一意の値を取得し、欠落がある場合は削除する) ですが、少し異なる考え方があります。filter each を使用して削除する列を見つけ、delete columns を使用してそれらをすべて同時に削除します。
Names Default To Here(1);
dt = Current Data Table();
char_cols = dt << get column names(Character, String);
cols_to_remove = Filter Each({colname}, char_cols,
Summarize(dt, uniq = by(Column(dt, colname)));
Remove From(uniq, Contains(uniq, "")); // to remove missing values from list
N Items(uniq) == 1;
);
dt << Delete Columns(cols_to_remove);Re: 値が 1 つしかなく、文字列のバリエーションがない場合は CHAR 列を削除します1 つ注意すべき点があります。私と Jim は両方とも、一意の値のリストから欠落値を削除します。データ/モデル/ユース ケースによっては、それを別の値として考慮する必要がある (または考慮する必要がある) 場合がありますので、その点を考慮してください。どちらのスクリプトでもそれを考慮できますが、小さな変更が必要です。