0

観測ごとに 8000 の LrecL を持つフラット ファイル (ACC 形式) があり、ファイルには約 30k の観測が含まれています。@ ステートメントと Length ステートメントを使用してデータを読み取ると、最初のレコードは正しく読み取れますが、残りのレコードは読み取れません。私のコードは次のとおりです。

Data InterA;
infile "\\server\Data\ABC.acc" lrecl =8764;

input
@   1   a 12.
@   548 b   4.
@   552 c   4.
@   556 d   4.
@   560 e   4.
@   585 f   3.
@   588 g   3.
.
.
.
.
.;
run;

私が持っている質問は、どうすればファイル全体を読むことができるのですか?

前もって感謝します!

4

1 に答える 1

2

LRECL に関してエンタープライズ ガイドについて特に特別なことは何もありません。8000 ~ 9000 では、OS などに関して特別な問題が発生する可能性があります。

あなたの問題はレコード区切りに関連していると思われます。ほとんどの場合、(Windows マシンなどで) CR+LF を期待しており、データには LF (Unix) またはそれに類似したものがあります。または、レコード区切りがありません。何が起こっているかというと、SAS は、非常に長い回線が 1 つあると認識し、別の回線があることを認識していません。そのため、1回の反復後に読み取りが停止します。

これにはいくつかの方法で対処できます。

まず、INFILE にTERMSTR= オプションがあります。

infile "//whatever/whatever.dat" termstr=LF lrecl=8764;

第 2 に、行が固定長 (すべての行が同一) である場合、RECFM=FSAS に正確に 8764 のブロックで読み取るように強制するために使用します。

infile "//whatever/whatever.dat" recfm=f lrecl=8764;

レコードセパレーターがある場合は、1 つ上げる必要がある場合があります。これは、レコード区切りがない場合に必要なソリューションですが、現在のコードで簡単に機能するものは他にありません。

于 2015-04-06T17:17:39.443 に答える