레이블이 macro인 게시물을 표시합니다. 모든 게시물 표시
레이블이 macro인 게시물을 표시합니다. 모든 게시물 표시

2010년 3월 30일 화요일

화면에서 매크로 변수 값 입력

거의 20년전에 베이직이나 포트란으로 코딩하던 향수를 불러 일으키네요. ^^

화면에서 매크로 변수값을 입력하는 간단한 예제 입니다.


%WINDOW INFO
  #5 @6 '작업년월을 입력하세요(jobbaseym)[yyyymm]:'
  #5 @50 JOBBASEYM 6 ATTR=UNDERLINE;

%DISPLAY INFO;

%LET JOBBASEYM=%TRIM(&JOBBASEYM);
%LET YEAR=%SUBSTR(&JOBBASEYM,1,4);

%PUT *********************;
%PUT [작업년월]:&JOBBASEYM;
%PUT [작업연도]:&YEAR;
%PUT *********************;


입력 화면에 컬러를 추가하는 예제입니다.

%window info color=gray  
  #3 @5 '환영합니다'
  #5 @5 'ID를 입력하세요:'                                                                                                          
  #5 @26 id 8 attr=underline                                                                                                            
  #7 @5 '오늘은 '                                                                                                                    
  #7 @15 "%sysfunc(today(),yymmdds10.)" attr=rev_video color=pink
  #7 @25 '일 입니다'
  #12 @29 'Press ENTER to continue.';
%display info;                                                                                                                          
                                                                                                                                        
%put [입력된 ID : &id];

2009년 10월 17일 토요일

한글 label 테스트

갑자기 label을 한글로 쓰고 싶어졌습니다. 그래서 테스트를 해봤습니다.

windows XP, AIX 5에서 각각 다음 소스를 실행했습니다.
쌔스는 9.1.3 한글버전입니다.

개인적으로 쌔스 8버전에서 한글데이터 처리 때문에 고생했던 기억이 있어서 쌔스는 다국어에 약하다는 막연한 느낌이 있었습니다.

설마했는데 결과는 "잘 작동한다" 입니다.


[테스트 소스]

%macro Test_Korean_Label(label);

    %goto &label;

    %단계1:
        %put 단계1 실행;

    %단계2:
        %put 단계2 실행;

    %단계3:
        %put 단계3 실행;

    %종료:
        %put 종료처리;

%mend;


%Test_Korean_Label(단계2);

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];