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

2010년 4월 4일 일요일

데이터 셋 찾기

데이터셋 이름을 파라메터로 입력하면 어떤 라이브러리에 있는지 찾아주는 매크로 입니다.
 
%macro findDataSet(dsname);

    proc sql noprint;
        select  libname into :lib separated by ','
        from    sashelp.vmember
        where   memname=upcase("& dsname") and memtype='DATA'
        ;
    quit;
    %put Data Set [& dsname]은 [&lib] Library에 있습니다;

%mend findDataSet;

%findDataSet(adomsg);

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월 16일 금요일

%SYSFUNC로 실행 가능한 함수



FunctionDescription and Syntax
ATTRCreturns the value of a character attribute for a SAS data set.
%SYSFUNC(ATTRC(data-set-id,attr-name))
ATTRNreturns the value of a numeric attribute for specified SAS data set.
%SYSFUNC(ATTRN(data-set_id,attr-name))
CEXISTverifies the existence of a SAS catalog or SAS catalog entry.
%SYSFUNC(CEXIST(entry <, 'U'>))
CLOSEcloses a SAS data set.
%SYSFUNC(CLOSE(data-set-id))
CUROBSreturns the number of the current observation.
%SYSFUNC(CUROBS(data-set-id))
DCLOSEcloses a directory.
%SYSFUNC(DCLOSE(directory-id))
DINFOreturns specified information items for a directory.
%SYSFUNC(DINFO(directory-id,info-items))
DNUMreturns the number of members in a directory.
%SYSFUNC(DNUM(directory-id))
DOPENopens a directory.
%SYSFUNC(DOPEN(fileref))
DOPTNAMEreturns a specified directory attribute.
%SYSFUNC(DOPTNAME(directory-id,nval))
DOPTNUMreturns the number of information items available for a directory.%SYSFUNC(DOPTNUM(directory-id))
DREADreturns the name of a directory member.
%SYSFUNC(DREAD(directory-id,nval))
DROPNOTEdeletes a note marker from a SAS data set or an external file.
%SYSFUNC(DROPNOTE(data-set-id|file-id,note-id))
DSNAMEreturns the data set name associated with a data set identifier.
%SYSFUNC(DSNAME(<data-set-id>))
EXISTverifies the existence of a SAS data library member.%SYSFUNC(EXIST(member-name<,member-type>))
FAPPENDappends a record to the end of an external file.
%SYSFUNC(FAPPEND(file-id<,cc>))
FCLOSEcloses an external file, directory, or directory member.
%SYSFUNC(FCLOSE(file-id))
FCOLreturns the current column position in the File Data Buffer (FDB)
%SYSFUNC(FCOL(file-id))
FDELETEdeletes an external file. %SYSFUNC(FDELETE(fileref))
FETCHreads the next nondeleted observation from a SAS data set into the Data Set Data Vector (DDV).
%SYSFUNC(FETCH(data-set-id<,'NOSET'>))
FETCHOBSreads a specified observation from a SAS data set into the DDV.%SYSFUNC(FETCHOBS(data-set-id,obs-number<,options>))
FEXISTverifies the existence of an external file associated with a fileref.%SYSFUNC(FEXIST(fileref))
FGETcopies data from the FDB. %SYSFUNC(FGET(file-id,cval<,length>))
FILEEXISTverifies the existence of an external file by its physical name.
%SYSFUNC(FILEEXIST(file-name))
FILENAMEassigns or deassigns a fileref for an external file, directory, or output device.
%SYSFUNC(FILENAME(fileref,file-name<,device<,host-options<,dir-ref>>>))
FILEREFverifies that a fileref has been assigned for the current SAS session.%SYSFUNC(FILEREF(fileref))
FINFOreturns a specified information item for a file.
%SYSFUNC(FINFO(file-id,info-item))
FNOTEidentifies the last record that was read.
%SYSFUNC(FNOTE(file-id))
FOPENopens an external file.
%SYSFUNC(FOPEN(fileref<,open-mode<,record-length<,record-format>>>))
FOPTNAMEreturns the name of an information item for an external file.
%SYSFUNC(FOPTNAME(file-id,nval))
FOPTNUMreturns the number of information items available for an external file.
%SYSFUNC(FOPTNUM(file-id))
FPOINTpositions the read pointer on the next record to be read.%SYSFUNC(FPOINT(file-id,note-id))
FPOSsets the position of the column pointer in the FDB.
%SYSFUNC(FPOS(file-id,nval))
FPUTmoves data to the FDB of an external file starting at the current column position.
%SYSFUNC(FPUT(file-id,cval))
FREADreads a record from an external file into the FDB.%SYSFUNC(FREAD(file-id))
FREWINDpositions the file pointer at the first record. %SYSFUNC(FREWIND(file-id))
FRLENreturns the size of the last record read, or the current record size for a file opened for output.
%SYSFUNC(FRLEN(file-id))
FSEPsets the token delimiters for the FGET function.
%SYSFUNC(FSEP(file-id,cval))
FWRITEwrites a record to an external file.
%SYSFUNC(FWRITE(file-id<,cc>))
GETOPTIONreturns the value of a SAS system or graphics option.%SYSFUNC(GETOPTION(option-name<,reporting-options<,...>>))
GETVARCassigns the value of a SAS data set variable to a character DATA step or macro variable.
%SYSFUNC(GETVARC(data-set-id,var-num))
GETVARNassigns the value of a SAS data set variable to a numeric DATA step or macro variable. %SYSFUNC(GETVARN(data-set-id,var-num))
LIBNAMEassigns or deassigns a libref for a SAS data library.
%SYSFUNC(LIBNAME(libref<,SAS-data-library<,engine<,options>>>))
LIBREFverifies that a libref has been assigned.
%SYSFUNC(LIBREF(libref))
MOPENopens a directory member file.
%SYSFUNC(MOPEN(directory-id,member-name<open-mode<,record-length<,record-format>>>))
NOTEreturns an observation ID for current observation of a SAS data set.
%SYSFUNC(NOTE(data-set-id))
OPENopens a SAS data file.
%SYSFUNC(OPEN(<data-file-name<,mode>>))
PATHNAMEreturns the physical name of a SAS data library or an external file.
%SYSFUNC(PATHNAME(fileref))
POINTlocates an observation identified by the NOTE function.
%SYSFUNC(POINT(data-set-id,note-id))
REWINDpositions the data set pointer to the beginning of a SAS data set.
%SYSFUNC(REWIND(data-set-id))
SPEDISreturns a number for the operation required to change an incorrect keyword in a WHERE clause to a correct keyword.
%SYSFUNC(SPEDIS(query,keyword))
SYSGETreturns the value of the specified host environment variable.
%SYSFUNC(sysget(host-variable))
SYSMSGreturns the error or warning message produced by the last function that attempted to access a data set or external file.
%SYSFUNC(SYSMSG())
SYSRCreturns the system error number or exit status of the entry most recently called.
%SYSFUNC(SYSRC())
VARFMTreturns the format assigned to a data set variable.
%SYSFUNC(VARFMT(data-set-id,var-num))
VARINFMTreturns the informat assigned to a data set variable.%SYSFUNC(VARINFMT(data-set-id,var-num))
VARLABELreturns the label assigned to a data set variable.
%SYSFUNC(VARLABEL(data-set-id,var-num))
VARLENreturns the length of a data set variable.
%SYSFUNC(VARLEN(data-set-id,var-num))
VARNAMEreturns the name of a data set variable.
%SYSFUNC(VARNAME(data-set-id,var-num))
VARNUMreturns the number of a data set variable.
%SYSFUNC(VARNUM(data-set-id,var-name))
VARTYPEreturns the data type of a data set variable.
%SYSFUNC(VARTYPE(data-set-id,var-num))

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