2017-12-14 14 views
2

私はSASをかなり新しくしており、非常に単純な問題があります。SAS:テキストファイルを入力するときに改行文字を指定する

123,123,345,457,4.55~123,123,345,457,4.55~123,123,345,457,4.55

だから、すべてのデータを単一の行に書かれている:私はこのように保存されたテキストファイルを持っています。 〜文字は改行文字を示します。

V1 V2 V3 V4 V5 
123 123 345 457 4.55 
123 123 345 457 4.55 
123 123 345 457 4.55 

だから、「」区切り文字があると 『〜』改行文字である:私の最終目標は、SASにテキストファイルをロードし、次のようになります。SASデータセットを作成することです。 これをどうすれば実現できますか?

ありがとうございます。

種類よろしく Consti

答えて

1

ただ、新しい行に行くから、それを防ぐために、区切り文字として文字の両方を使用してinputステートメントに@@を追加するためにSASを教えてください。

data want ; 
    infile cards dsd dlm=',~'; 
    input v1-v5 @@ ; 
cards; 
123,123,345,457,4.55~123,123,345,457,4.55~123,123,345,457,4.55 
;;;; 

結果

Obs  v1  v2  v3  v4  v5 
1  123 123 345 457 4.55 
2  123 123 345 457 4.55 
3  123 123 345 457 4.55 

ファイルから読んでいるなら、あなたはまた、もしものの、INPUTステートメントに代わり@@のINFILEステートメントにRECFM = Nオプションを使用することができるかもしれません実際には1行にLFまたはCR/LFがあり、区切り文字のリストに含めることもできます。

0

トムの回答は、正規のファイルであり、一貫性のない行に問題がない場合には正しいです。

あなたが言うことを正確に行う必要がある場合は、可能です。前処理ステップで~を改行に変換します。これを行う方法が1つあります。

まず、データステップでは、dlmが~のファイルを調べます。行の最後まで実行するまでフィールドを入力し、フィールドごとに一時ファイルに出力します(行にはデータ行が1つしかありません)。

ここでは、通常のように読むことができる一時ファイルがあります。~文字はありません。

これは、~を「0D0A'x」で置き換えるか、たとえばあなたの好みのEOLチャーターがどれであるかを見つける/置き換えることができます(これはおそらく他の言語では簡単ですunixにアクセスし、例えばawk/etcを使ってperlにアクセスすることもできます。これはおそらくSASよりも簡単に行うことができます)。

filename test_in "c:\temp\test_dlm.txt"; 
filename test_t temp; 

data _null_; 
    infile test_in dlm='~'; 
    file test_t; 
    length test_field $32767; 
    do _n_= 1 by 1 until (_n_ > countc(_infile_,'~')); 
    input 
     test_field :$32767. @@; 
    putlog test_field; 
    put test_field $; 
    end; 
    stop; 
run; 

data want; 
    infile test_t dlm=','; 
    input v1 v2 v3 v4 v5; 
run; 
関連する問題