データ構造: Excel または CSV ファイルとして読み取ることができるデータ セットがあります。次の変数タイプがあります: 日付、時刻、数値変数、および数値に誤って文字が付加されている数値変数であるべきもの- 例: -0.011* および 0.023954029324) (最後の括弧はセル内にあります) -ファイルを書き込んだプログラムのエラー。また、すべてのレコード間に空白行があり、何百ものファイルを管理しているため、これらをすべて削除するのは現実的ではありません。
データの問題: 一部の値は文字までは正しい (つまり、アスタリスクが削除されている限り -0.011 は正しい) と判断しましたが、0.023954029324 などの他の値は完全に正しくなく、欠落させる必要があります。この問題についてはコメントしないでください。この問題は私の手に負えません。この時点で私にできることは、エラーが修正され、文字値がファイルに書き込まれなくなるまで、データを管理することだけです。
SAS の問題:
1) Excel ファイルで PROC IMPORT を使用すると、SAS は最初の 8 行 (CSV ファイルの場合は 20 行) を使用して、変数が数値か文字かを判別します。かっこのアスタリスクが最初の 20 行以内に出現しない場合、SAS は変数が数値であると判断し、それ以降の文字値が欠落しているセルを作成します。アスタリスクの場合、値の数値部分を保持し、後のデータ ステップでアスタリスクを削除したいので、これは問題ありません。PROC IMPORT を使用して Excel ファイルをインポートする場合、GUESSINGROWS オプションは使用できません (CSV ファイルの場合と同様、以下を参照)。編集:また、MIXED=YESオプションは機能しません(以下のコメントを参照してください-SASが使用する行数を変更する必要があります。これは、私にとって、このオプションが...何をすることを意味しますか?)。
2) CSV ファイルで PROC IMPORT を使用する場合、GUESSINGROWS=32767 を指定できます。これにより、アスタリスクのある変数が文字であると判断され、アスタリスクが維持されるため、非常に興奮します。ただし、非常に奇妙なことに、括弧を含む変数を文字として判断しなくなりました (括弧が最初の 20 行にある限り、Excel ファイルをインポートするときに行われるように)。代わりに、文字を削除し、さらに値を四捨五入します。最も近い整数 (0.1435980234 は 0、1.82149023843 は 2 など)。これは丸めが粗すぎるため、小数点以下の桁数を維持する必要があります。その上、括弧がなくなったので、適切なセルを欠落させることはできません。SASを丸めたり、括弧を維持したりしないようにする方法があるかどうかはわかりません。私に、これは一貫性のない動作です。この場合、括弧ではなくアスタリスクが文字と見なされるのはなぜですか? また、PROC IMPORT((1)で説明)を使用してExcelファイルを読み込むと、かっこで対処できます (最初の 20 行に表示される場合) - 別の矛盾。
3) INFILE を使用すると、読み込もうとするすべての変数でエラーが発生します。この手順は、データがどのように変化するかについて非常に敏感で不安定です (そして、空白の回避策をコーディングする必要があります)。データライン)。
ULTIMATE GOAL (重要な場合、このコードはマクロ内で自動的に実行されることに注意してください):
1) 日付変数を日付として読み取る
2) 時間変数を時間として読み取る
3) その変数の任意のセルに文字が存在する変数 (20 行後でも) を文字変数として識別し、セル内の値を維持できる (つまり、文字を丸めたり削除したりしないでください)。これは、特定の変数のセットを文字にするようにSASにアプリオリに指示することによって(文字を削除したり、セルを欠落させたりした後にそれらを数値に変更します)、またはSASが文字を含む変数を独自に識別することによって行うことができます。