2017-05-23 13 views
1

むしろ奇妙な問題です。私はSASで次のコードを実行しています。SASで%%を使用しているデータラインは含まれていません

data manual_input; 
infile datalines dlm=','; 
length name $ 32 ; 
input name $ varlist_no ; 
datalines; 
K0002,1 
B0000,1 
; 
run; 

私たちのUnixサーバ上のエンタープライズ・ガイドの私の強化のエディタで正常にこれを実行すると、それが正常に動作し、何の問題。次のように

私は%を通してそれを実行し、文を含めない:

filename ds_code "/wload/something/something/foo/bar"; 
%include ds_code ("varlist_input_test.sas") /source2; 

コードは、もはや機能します。次のようなエラーが表示されます。

NOTE: Invalid data for varlist_no in line 24 7-80. 
RULE:  ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0      

24 CHAR K0002,1.                   
    ZONE 43333230222222222222222222222222222222222222222222222222222222222222222222222222 
    NUMR B0002C1D000000000000000000000000000000000000000000000000000000000000000000000000 
name=K0002 varlist_no=. _ERROR_=1 _N_=1 
NOTE: Invalid data for varlist_no in line 25 7-80. 

25 CHAR B0000,1.                   
    ZONE 43333230222222222222222222222222222222222222222222222222222222222222222222222222 
    NUMR 20000C1D000000000000000000000000000000000000000000000000000000000000000000000000 
name=B0000 varlist_no=. _ERROR_=1 _N_=2 
NOTE: The data set WORK.MANUAL_INPUT has 2 observations and 2 variables. 
NOTE: Compressing data set WORK.MANUAL_INPUT increased size by 100.00 percent. 
     Compressed is 2 pages; un-compressed would require 1 pages. 

何がありますか?カンマ区切りの入力を指定しました。また、なぜデータラインがマクロ内で動作しないのか理解しています。なぜ静的なデータセット入力を繰り返し実行する必要がありますか?しかし、私はカード/データラインを使用するコードを呼び出すためにインクルードステートメントを使用することは完全に受け入れられると信じています。

誰もが考えている?

答えて

1

%インクルードファイルにハングアウトしているEOL(行末)文字があるようです。 Windows(CR/LF EOL文字)にインクルードファイルを作成し、Unix(LFのみ)にインクルードしている可能性が高いので、CR文字はまだ存在しますが、行末のターミネータの一部としては扱われません。

このファイルをUnixで作成するか、適切に転送するか(ラインターミネータを修正する知っている知的FTPプログラムを使用して)、自分で削除する必要があります。COMPRESSオプションの第3引数'C'で行います。

TERMSTRオプションをfilenameまたは%includeに設定してこの問題を解決することもできます。

filename testincl "c:\temp\test_include.sas" termstr=LF; 
%include testincl; 

そして、あなたはこれを逆にすることができます:たとえば、私は意図的にここにあなたのエラーを再現することができます(test_include.sasを想定し、その中にあなたのコードを持っている)

filename testincl "c:\temp\test_include.sas" termstr=CRLF; 
%include testincl; 
+1

あなたはに 'TERMSTR ='オプションを追加することができます'%INCLUDE'文です。 – Tom

+0

良い点が追加されました。 – Joe

関連する問題