2017-05-23 3 views
1

다소 이상한 문제가 있습니다. SAS에서 다음 코드를 실행하고 있습니다.데이터 라인이 SAS에 % 포함됩니다.

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

우리 유닉스 서버의 Enterprise Guide에있는 내 향상된 편집기에서 이것을 정상적으로 실행할 때 문제없이 작동합니다.

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. 

무엇을 제공합니까?! 쉼표로 구분 된 입력을 지정했습니다. 또한 데이터 라인이 매크로 내에서 작동하지 않는 이유를 이해합니다. 왜 정적 데이터 세트 입력을 반복적으로 실행해야합니까? 그러나 카드/데이터 라인을 사용하는 코드를 호출하기 위해 include 문을 사용하는 것이 완벽하게 용인 될 수 있다고 생각합니다.

누구든지 아이디어가 있습니까?

답변

1

% 포함 파일에서 놀고있는 EOL (줄 바꿈) 문자가있는 것 같습니다. Windows (CR/LF EOL 문자)에 포함 파일을 작성하고 Unix (LF에만 해당)에 % 포함하므로 CR 문자는 여전히 있지만 행 끝 종결 자의 일부로 처리되지 않습니다.

유닉스에서이 파일을 만들거나 (줄 종결자를 수정하는 지능형 FTP 프로그램을 사용하여)이 파일을 올바르게 전송하거나 직접 제거해야합니다 (COMPRESS, 선택적인 세 번째 인수 인 '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