2016-07-21 10 views
0

大きなテキストファイルがあり、3つのテーブルがあります。ファイル内のレコードはソートされていません。ファイル内のレコードは、スペースで区切られた列名に沿っています。テーブルは最後まで繰り返されています。私は正しいテーブルの下のそのメモ帳ファイルからSASにデータをインポートしたいと思います。私は、テキストファイルからレコードと列名を読み込み、それらをSASの正しいテーブルの下に置きたいと思います。私はINFILEを試してみましたが、データをSASにインポートするのに成功しましたが、Columnsはソートされておらず、テーブル自体が繰り返されているため、SASの正しいテーブルの下にレコードを保持することは難しくなります。私はSASの初心者ですが、どんな助けも大歓迎です。あなたはあなたがレポートで検出するためのロジックを持っていることになるでしょうレポートを読んNotepadファイル(.txt)からSaSにインポートする

ABCD - ABCD   ----  Table 1                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 2                  

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 3                  

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 1                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 2                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 3                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxxxxxxx            
Column2   x          Column4 xx 
+0

出力の例を指定する必要があります。おそらく、そのファイルのどの部分をデータとして読みたいかについても明確にする必要があります。変数名は事前に知っていますか? – Tom

+0

ソートされていないデータを含むテキストファイルをインポートしようとしています。列と列に対するデータは、スペース ''で区切られた同じ行にあります。約100列あります。テーブルは同じ列名で繰り返されますが、ファイルの終わりまでは異なるデータが使用されています。上記の例は入力ファイルを示しており、SASの正しいテーブル形式で出力が必要です。 –

+0

このTXTファイルはソフトウェアシステムダンプのようです。このファイルと同じデータのXML/JSONなどの他のフォーマットタイプがありますか?ツリータイプの構造を少し見かけますか? – Parfait

答えて

1

通常時に

以下は、テキストファイル内のデータの一例です。ヘッダー行から値を読み取り、保持したいと思うでしょう。通常は、レポートの日付、レポートの対象者、またはあなたの場合のように、レポートのどの部分からデータを取得するかが含まれます。

data step1 ; 
    infile 'myfile.txt' truncover ; 
    input @; 
    * eliminate blank lines ; 
    if _infile_ = ' ' then delete; 
    * Read the TABLE name ; 
    if substr(_infile_,23,6) = ' ---- ' then do; 
    block+1; 
    input @33 table_name $32.; 
    retain table_name; 
    delete; 
    end; 
    else do; 
    * Read two values from each line ; 
    input @2 varname $20. value $50. @; 
    output; 
    input @59 varname $20. value $50. ; 
    output; 
    end; 
run; 

次に、ステップを追加して並べ替えることができます。

proc sort data=step1 out=step2; 
    by table_name block varname ; 
run; 
proc transpose data=step2 out=step3; 
    by table_name block; 
    id varname; 
    var value; 
run; 
+0

入力@ 2 varname $ 20。値$ 50。 @; 出力;なぜ入力文の最後に "@"が必要ですか?入力文を指さないときに@が必要な理由が混乱しています – DukeLuke

+1

SASが次のINPUT文の行を保持するように@を使用します。そうすれば、レポートの左右の列を読み込むときに同じ変数名を使用することができます。同じ理由で、最初のINPUTステートメントの後に@があります。 – Tom

+0

ありがとうございます。これは@@と同じ効果がありますか? – DukeLuke

関連する問題