私はカラム幅が固定されているローデータを扱っていますが、すべてのレコードが1行に書き込まれています。 INPUT
ステートメントで 固定列幅を使用する方法と、@@
を使用して1行に複数の観測値を読み取る方法を知っていますが、両方を実行しようとすると問題が発生します。SAS DATAのステップ/ 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
など)に頼っているかもしれませんか?
いいえ...私は別に何をしていたのか分かりませんでしたが、テストしてサンプルデータで動作します –
うわー、私はさまざまな幅の列を扱い、 ':'表記':'を削除して幅を指定するだけで、絶対幅を指定するのを忘れてしまったのです。私は今、この回答を受け入れていますが、私はあなたにも教えてくれることを望んでいました。人々はなぜ「アルファ$ 5」と言うことができるのでしょうか?前の表記法はある種の遺産支援ですか?とにかく、偉大な答えをありがとう。 –
アルファ$ 1-5とアルファ$ 5は別物です。最初の行は、現在の入力行の列1-5から読み取ります(これが元の問題の根本的な原因です)。 2番目の文字は、現在の位置からNEXT 5文字を読み取ります。だから1つは別のものに取って代わるものではなく、彼らは相補的です。 –