2009년 10월 13일 화요일

data step에서 macro변수 생성/사용하기

처음 쌔스를 배울때 헛갈리게 만드는 부분들 중 하나가 데이터 스텝 내에서 매크로 변수를 사용하는 것 입니다.
가끔 아래와 같이 데이터 스텝내에서 생성된 값을 매크로 변수에 할당했는데 해당 스텝내에서 다시 불러 쓰고 싶을때가 있습니다.

[예제]
%let test=5;

data _null_;
    var1 = 10;
    call symput('test', compress(var1));

    test2=&test;
    put test2=;
run;
%put [&test];

그런데 실행해 보면 test2에 5가 들어가 있습니다. 의도했던 것은 10인데 말입니다.

데이터 스텝이 실행되는 시점에 test2=&test; <-- 요부분의 매크로변수가 정해져 버려서 test2=5; 라고 들어가 버립니다.

동적으로 매크로변수를 할당해서 사용하고 싶을때는 아래와 같이 symget 함수를 사용해야 합니다.


%let test=5;

data _null_;
    var1 = 10;
    call symput('test', compress(var1));

    test2=symget('test');
    put test2=;
run;

%put [&test];

댓글 없음: