1

informat の使用を教える演習で、.dat データ セットを sas に入力しています。これが私がこれまでに持っているものです。

DATA companies;
    INFILE "/folders/myshortcuts/Stat324/BigCompanies.dat" encoding='wlatin2';
    INPUT rank 3. @6 company $UTF8X25. @35 country $17. @53 sales comma6. @60 profits comma8. @70 assets comma8. @82 marketval comma6.;
RUN;

これは、特殊文字/国際文字を含む行を除くすべての行で機能します。そのような:

94   SociÈtÈ GÈnÈrale             France             $98.6B    $3.3B $1,531.1B    $25.8B

これらの行は最初の通貨値 (@53 sales comma6.) でつまずき、その入力に対して無効なデータが見つかったことを示す警告がスローされ、欠損値 (.) が割り当てられます。

@ ポインターと informat w 値をいじってみると、特殊文字が列の配置から外れていることが明らかになるようです。これは可能ですか (特殊文字は、1 文字として出力されたとしても、実際には 2 ビット/スペースを占有します。単純な文字はありますか?解決?

4

1 に答える 1

1

はい、その通りです。文字が UTF8 でエンコードされている場合、1 ~ 4 バイトの文字が必要になる場合があります。多くの文字は 1 バイトですが、一部の文字はそれ以上かかります (ここでは「特殊文字」と呼びます)。SAS がファイルを として読み取る場合WLATIN1、各バイトは個別の文字であると見なされます。

あなたのコードは私には少しわかりにくいです.ファイルがWLATIN1であることを指定していますが、SASにそのフィールドをUTF-8として読み取るように指示しています. それはどれですか?

セッションのエンコーディングが UTF-8 と互換性があり、読み込むファイルが UTF-8 でエンコードされている場合は、インファイルのエンコーディングを UTF-8 に切り替える必要があります。ファイルにエンコーディングが混在していて、UTF-8 エンコーディングを使用して読み込むことができない理由がある場合、特別なコードで処理する必要がある複雑な問題が発生する可能性があります (つまり、どのくらいの長さかを把握するため)。 UTF8 部分は実際にはそうであり、ポインタを正しい位置に進めて次のフィールドを読み取ります)。区切り文字を使用してこれを読み取ることもできます。これは、データの正確な形式によって異なります。

于 2015-10-29T15:31:48.773 に答える