[FCMP 프로시져] 정보 보호를 위하여 특정 위치의 값을 '*'로 대체 후 출력(PRINT)하기;
* 질문 : http://cafe.daum.net/statsas/B3m/15026;
* 원본 데이터 변경 없이 데이터 정보 보호를 위하여 출력 시 특정 위치 값을 '*'로 대체하여 출력하기 위한 사용자 정의 함수;
* 출력 형식이 지정된 값을 반환하기 위한 사용자 정의 함수 생성;
* 다음 사용자 정의 함수는 입력 변수(number)의 값을 내부 변수 'BACK'로 입력 받아서 1번째 자리와 8번째 자리의 값 이외의 값을 '*'로 대체 후 반환하는
* 함수이다.;
proc fcmp outlib=work.functions.smd;
function qfmt(BACK $) $;
length ENCODING_VAR $14;
ENCODING_VAR=substr(BACK,1,1)||REPEAT('*',5-1)||'-'||substr(BACK,8,1)||REPEAT('*',6-1);
return(ENCODING_VAR);
endsub;
run;
* 사용자 정의 함수 호출;
options cmplib=(work.functions);
* FCMP 프로시져를 사용하여서 생성된 함수를 기반으로 출력형식(FORMAT)을 생성;
proc format;
value $qfmt
other=[qfmt()];
run;
data BACK;
input number $ 14.;
cards;
123456-1234567
789458-8589587
989858-5824587
;
run;
* PRINT 프로시져에서 qfmt 출력형식을 사용하여서 NUMBER 변수를 출력;
proc print data=BACK;
format number $qfmt14. ;
run;
/* 사용자 정의 함수 테스트*/
/*
data BACK1;
SET BACK;
VAR = qfmt(number);
PUT VAR=;
RUN;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Early bird rate extended! Save $200 when you sign up by March 31.