2016-10-27 3 views
0

내 데이터는 50,000 개의 행과 300 개의 열을 가진 SAS 테이블입니다.SAS에 부분 소스 코드를 삽입하는 방법은 무엇입니까?

여기서는 10 열만있는 작은 예를 만듭니다. 3 개의 열은 refecence이고 다른 하나는 가변 열입니다.

PROC SQL; 
CREATE TABLE WORK.MATRIX(label="MATRIX with variable columns") AS 
SELECT t1.REFERENCE_1, 
     t1.REFERENCE_2, 
     t1.REFERENCE_3, 

     t1.COLUMN_A, 
     t1.COLUMN_B, 
     t1.COLUMN_C, 
     t1.COLUMN_D, 
     t1.COLUMN_E, 
     t1.COLUMN_F, 
     t1.COLUMN_G 

-------  
Variable souce code which makes operation on these columns 
------- 

FROM WORK.MY_DATA t1; 
QUIT; 

내가 열 주어진 선택을 나에게 소스 코드를 제공하는 SAS 코드가 alreary :

여기 내 SAS의 programm에 있습니다. 내가 지금 여기 ": \ My_columns_choice.txt C"이 코드를 저장할 수

 t1.COLUMN_B, 
     t1.COLUMN_D, 
     t1.COLUMN_G, 

: 여기 내 SAS 코드의 출력이다. 이것은 내가하고 싶은 것입니다 :

PROC SQL; 
CREATE TABLE WORK.MATRIX(label="MATRIX with variable columns") AS 
SELECT t1.REFERENCE_1, 
     t1.REFERENCE_2, 
     t1.REFERENCE_3, 

INSERT „c:\My_columns_choice.txt“ 

INSERT „c:\My_source_code_which_makes_operations.txt“ 

FROM WORK.MY_DATA t1; 
QUIT; 

그래서 질문은 다음과 같이 발생,이 INSERT 같은 기능의 종류를 통해 SAS 프로그램에 있으며이 프로그램 부분의 소스 코드를 삽입 할 수 있습니까? 올바른 구문은 무엇입니까?

감사합니다. 건배

마우리

답변

0

사용 %INCLUDE 매크로 문. 로그를 얻으려면 SOURCE2 옵션을 추가하십시오.

%INCLUDE 'c:\My_source_code_which_makes_operations.txt'/SOURCE2; 

편집 : 작동하지 않는이 특별한 경우 (proc sql)에 있도록

%include는 매크로 문 아닙니다. 오직 당신 만이 전체 질의를 포함 할 수 있지만 그 일부는 받아 들일 수 없습니다.

이 문제를 해결하려면 data step을 사용하여 파일을 읽고 select 문에 넣는 매크로 변수를 만들 수 있습니다.

예 (텍스트 파일에 하나 개의 라인) :

당신은 %를 사용할 수 있습니다
filename f "/folders/myfolders/class.txt"; 
data _null_; 
    infile f dlm='00'x lrecl=32767; 
    length line $32767; 
    input line; 
    call symputx('vars', line); 
run; 

PROC SQL; 
    CREATE TABLE class AS 
    SELECT name, 
     &vars 
    FROM sashelp.class; 
QUIT; 
+0

정확한 신택스를 제공 할 수 있습니까? 이 코드는 오류를 제공하기 때문에 'PROC SQL; SELECT t1.REFERENCE_1, AS 표 WORK.MATRIX (라벨 = "변수 열 MATRIX") 작성 ' t1.REFERENCE_2, t1.REFERENCE_3을 %를 포함'C : \ My_source_code_which_makes_operations.txt '/ SOURCE2; FROM WORK.MY_DATA t1; QUIT;'줄 끝의 두 공백은 줄 바꿈을 위해 작동하지 않습니다! : –

+0

죄송합니다,이 방법은 작동하지 않습니다. 나를 위해 매우 이상한하지만 설명서에 따라 어떻게 든 올바른. 나는'% 포함 '을 사용할 수없는'PROC SQL' 특별한 장소라고 생각합니다. –

+0

다른 해결책을 추가했습니다. –

1

은 여러 줄의 코드를 포함하는 포함하지만 당신은 문장의 일부를 포함하는 것을 사용할 수 없습니다. 그러나 매크로 변수를 사용하여 명령문의 일부일 수있는 코드를 생성 할 수 있습니다. 예를 들어 쉼표로 구분 된 열 참조 목록이있는 매크로 변수를 만들 수 있습니다.

%let varlist=t1.COLUMN_B,t1.COLUMN_D,t1.COLUMN_G; 

그런 다음 매크로 변수를 참조하여 텍스트를 삽입 할 수 있습니다.

PROC SQL; 
    CREATE TABLE MATRIX(label="MATRIX with variable columns") AS 
    SELECT t1.REFERENCE_1 
     , t1.REFERENCE_2 
     , t1.REFERENCE_3 
     , &varlist 
    FROM MY_DATA t1 
    ; 
QUIT; 

하면 파일이 저장하려면 양식 또는 위의 %LET 문에 저장 한 후 바로 매크로 변수가 존재 있도록 SQL 문에 앞서 실행하는 %INCLUDE를 사용할 수 있습니다 중 하나. 파일에는 명세서의 일부가 아닌 전체 SAS 문을 포함해야합니다.

또는 텍스트 파일을 매크로 변수로 읽는 DATA 단계 (또는 다른 코드)를 작성할 수 있습니다. 파일을 읽는 데 DATA 단계를 사용하면 파일에 명령문의 일부만 포함 할 수 있다는 이점이 있습니다.예를 들어 한 줄의 파일을 읽고 매크로 변수에 저장하는 간단한 데이터 단계가 있습니다.

data _null_; 
    infile 'column_list.txt' ; 
    input; 
    call symputx('VARLIST',_infile_); 
run; 
proc sql; 
    ... &varlist ... 
+0

정확한 synthax'% INCLUDE'를 사용하여 답변을 보여 주시겠습니까? –

+0

원하는 것을 이해하지 못합니까? % LET 문을 포함하는 txt 파일을 만들고 실제 프로그램에서 % INCLUDE 문을 사용하여 % LET 문이 실행되도록 해당 파일을 포함하십시오. – Tom

+0

'% include'는'proc sql'에서 작동하지 않습니다. –

관련 문제