2017-08-16 6 views
0

ストリップ関数を使用して変数を作成する簡単なコードを実行すると、先頭と末尾の空白が正しく切り取られます。しかし、私がプログラムを呼び出すと、コードは%includeで表示されます。それは動作しません。%includeを使用してプログラムを呼び出すと、SAS文字列関数が機能しない

data aniorder; 
    input animalname $ seq taxonomy $20.; 
    datalines; 
    DOG 1 800 
    ELEPHANT 2 0 
    FISH 3 0 
    ; 
run; 
data aniorder2; 
    set aniorder; 
ani = strip(animalname); 
keep ani seq taxonomy; 
run; 

%を実行している私は、エラーメッセージを取得しない、それだけaniorder2データセットの変数「ANIは、」まだ、先頭と末尾の空白があります。上記のコードを実行しただけでは、これは起こりません。

%includeには何が起こっているのでしょうか?

答えて

1

変数は常に後続の空白を持ちます。 SAS文字変数は固定長で、空白で埋められます。しかし、STRIP()関数呼び出しは間違いなく先行ブランクを削除しますが、入力ステートメントで使用されているインフォーメントが前置ブランクであるべきではありません。

おそらく、ソースファイルの行末文字が正しくない可能性がありますか?たとえば、PC上でファイルを作成した場合、通常、各行の末尾にCR + LFがあります。 Unix上でそのファイルを読むと、CRはその行のデータの一部になります。そして、あなたの投稿した例をデータ行の先頭のスペースとして(なぜそこにあるのでしょうか?)おそらく、空白文字の一部を置き換えるために、TAB文字を使ってファイルを保存しましたか?

プログラムを調整してみてください。 / TERMSTR=CRLFオプションを%INCLUDEステートメントに追加して、それが末尾の "空白"を排除するかどうか確認することができます。 INFILEステートメントを追加して、EXPANDTABSを含めることができ、先頭の「空白」を排除するかどうか確認することができます。また、行にある文字よりも多くの文字を読み込んでいるので、TRUNCOVERオプションを追加することもできます。通常はインラインデータが80文字の倍数に自動的に埋め込まれるため、必要かどうかは不明です。

data aniorder; 
    infile datalines expandtabs truncover ; 
    input animalname $ seq taxonomy $20.; 
datalines; 
DOG 1 800 
ELEPHANT 2 0 
FISH 3 0 
; 
+0

ありがとうTom!それは、データライン上のTAB文字を取り除くのと同じくらい簡単でした。 –

+0

実際のTAB文字をソースコードファイルに格納しない理由のもう1つの例です。 SAS Display Managerエディタを使用している場合は、タブをスペースで置き換えるように設定を変更できます。 – Tom

関連する問題