0

列幅が固定されている生データを扱っていますが、そのすべてのレコードが 1 行に書き込まれています (私ではなくデータ ベンダーのせいです :-) )。INPUTステートメントで固定列幅を使用する方法と、1 行に複数の観察結果を読み取る方法を知って@@いますが、両方を実行しようとすると問題が発生します。

例として、データの列幅が固定されているが、レコードごとに 1 つの行があるコードを次に示します。このコードは正常に動作します:

DATA test_1;
    INPUT alpha $ 1-5   beta $ 6-10   gamma 11-15 ;

    DATALINES;
a    f    1
ab   fg   12
abc  fgh  123
abcd fghi 1234
abcdefghij12345
    ;
RUN;

ここで、私が実際にやろうとしていることのコードを示します。すべてのデータは 1 行にあり、次の@@表記法を使用しようとしています。

DATA test_2;
    INPUT alpha $ 1-5    beta $ 6-10    gamma 11-15 @@;

    DATALINES;
a    f    1    ab   fg   12   abc  fgh  123  abcd fghi 1234 abcdefghij12345
    ;
RUN;

これは、最初の 15 文字を読み取り、そのレコードを保持し、最初から再読み取りするだけであるため、失敗します。表記法のセマンティクスに関する私の理解に基づいて、@@なぜこれが起こるのかを明確に理解できます。

固定列データを 1 行から読み取る方法はありますか。つまり、?test_2と同じ内容を持たせます。test_1おそらく、ステートメント内のシンボルの組み合わせによってINPUT、または別の方法 (ファイル I/O 関数PROC IMPORTなど) に頼っているのでしょうか?

4

1 に答える 1

2

入力形式を使用して可変長を指定しようとしましたか?

例えば:

DATA test_2;
    INPUT alpha  $5.    beta $5.    gamma 5.0 @@;

    DATALINES;
a    f    1    ab   fg   12   abc  fgh  123  abcd fghi 1234 abcdefghij12345
;
RUN;

SASのドキュメントから:

フォーマットされた入力は、ポインターが列入力のように移動して、変数値を読み取ります。ポインターは、入力形式で指定された長さだけ移動し、次の列で停止します。

于 2012-04-13T18:55:59.460 に答える