2017-10-12 1 views
1

매크로 변수를 만들려고합니다. 매크로 변수 이름은을 확인한 후 텍스트를 이미 존재하는 변수 에 연결하여 만들어야합니다. 특히, PROC SQL 블록에서 INTO :을 사용하여이 작업을 수행하려고합니다. 여기에 내가하고 싶은 것을 설명하는 스 니펫이 있습니다. SAS - 텍스트를 현재 매크로 변수에 연결하여 매크로 변수를 동적으로 생성

%macro MyMacro(process); 
    PROC SQL; 
     SELECT 
      COUNT(*) INTO: &process._new_text 
     FROM 
      DataSetHere 
    ;QUIT; 
%mend MyMacro; 

내가이 매크로에 전화해서 내가, 내가 지금 선언 할 과정에 단어 "고양이"를 전달하는 경우는/이름 cat_new_text의 변수를 초기화하고는 COUNT를 반환해야합니다 (*) & cat_new_text이 참조 될 때마다 해당 쿼리에서 선택됩니다.

나는 약간의 주위를 둘러 보았고, 복수의 앰퍼샌드를 사용하여, & 프로세스를 먼저 따옴표로 해석하려고 시도했다. 아무 것도 나의 정확한 문제를 실제로 해결하지 못했다. 누구든지 이것을 달성하기위한 명확한 방법을 알고 있습니까?

미리 감사드립니다.

+1

, 그렇지 않으면이 목록에 선택된 값을 출력합니다 매크로가 실행될 때마다 영역. – user667489

답변

2

코드가 잘된 것 같아 설명하는대로 정확하게 처리됩니다. 당신은 실제로 다음에 "액세스"매크로 외부 새 매크로 변수, 예를 들어,

%MyMacro(cat); 
%put &cat._new_text.; 

을 시도하는 경우 변수가 매크로에 로컬로 생성 된 그의 범위 밖에 존재하지 않기 때문에 그러나 그것은 작동하지 않습니다 매크로.

는 문제를 해결하려면, 당신은 단순히 매크로 정의에 %global 문을 추가해야합니다

%macro MyMacro(process); 
    %global &process._new_text; 
    PROC SQL; 
    SELECT COUNT(*) 
    INTO: &process._new_text 
    FROM DataSetHere 
    ; 
    QUIT; 
%mend MyMacro; 
나는 시저의 SQL 문에`noprint`를 추가 제안
+0

% GLOBAL이 (가) 트릭을했습니다. 고마워요! –