제 코드에는 여러 레벨의 많은 매크로가 있습니다. 대부분의 매크로 변수는 동일하지만 (날짜), 때로는 다른 날짜로 매크로를 실행하려고합니다. 그러면 변수가 충돌합니다.sas 매크로에서 모든 변수를 로컬에서 만드는 방법은 무엇입니까?
매크로에 표시되는 모든 변수가 % 로컬 변수를 사용하지 않고도 로컬이어야한다는 것을 어떻게 나타낼 수 있습니까? 중첩 된 매크로의 경우 더 깊은 레벨의 변수 값은 상위 레벨의 변수를 감염시킵니다.
제 코드에는 여러 레벨의 많은 매크로가 있습니다. 대부분의 매크로 변수는 동일하지만 (날짜), 때로는 다른 날짜로 매크로를 실행하려고합니다. 그러면 변수가 충돌합니다.sas 매크로에서 모든 변수를 로컬에서 만드는 방법은 무엇입니까?
매크로에 표시되는 모든 변수가 % 로컬 변수를 사용하지 않고도 로컬이어야한다는 것을 어떻게 나타낼 수 있습니까? 중첩 된 매크로의 경우 더 깊은 레벨의 변수 값은 상위 레벨의 변수를 감염시킵니다.
매번 % local로 명시 적으로 나열해야합니다. 불행히도, 지름길은 없습니다.
중첩 된 매크로의 문제를 해결하는 데 어려움이있는 경우 내 표준을 변경하여 팁을 변경하면 결코 매크로 (입력) 매개 변수의 값이 수정되지 않습니다. 이 간단한 개념은 디버깅을 훨씬 쉽게 만듭니다.
그리고 매크로에 % include 문이 있으면 'source2'옵션을 추가하여 소스 코드가 로그에 표시되도록하십시오.
건배 롭
또 다른 옵션은 매크로 문 라인 매크로 매개 변수로 변수를 정의하는 것입니다. 다음은 DATE라는 전역 매크로 변수를 만든 다음 DATE라는 매개 변수가있는 매크로를 정의하는 간단한 프로그램입니다. 또한 매크로는 자신을 다른 날짜 값 (1)으로 호출합니다.
options nosource nonotes;
%let date = '01jan2011'd;
%put Global DATE = &date;
%******************************************************************************;
%macro test_macro_level(date=,nest_level=);
%put INSIDE MACRO - Nest Level=&nest_level : DATE=&date;
%if %eval(&nest_level = 1) %then %do;
%test_macro_level(date='01mar2011'd,nest_level=2);
%put INSIDE MACRO, AFTER NESTING - Nest Level=&nest_level : DATE=&date;
%end;
%mend test_macro_level;
%******************************************************************************;
%test_macro_level(date='01feb2011'd,nest_level=1);
%put Return to Global: Date=&date;
로그 파일은 읽
Global DATE = '01jan2011'd
INSIDE MACRO - Nest Level=1 : DATE='01feb2011'd
INSIDE MACRO - Nest Level=2 : DATE='01mar2011'd
INSIDE MACRO, AFTER NESTING - Nest Level=1 : DATE='01feb2011'd
Return to Global: Date='01jan2011'd
(1) 는 반복 매크로는, 예를 들어이며 어떠한 방식으로 자신의 코드를 오염해야 있습니다.
몇 가지 샘플 코드를 게시하십시오. 매크로를 작성하는 방법을 보여 주면 더 많은 조언을 제공 할 수 있습니다. –