오라클 Meta 테이블에서 변수 칼럼(성별) 통계 정보는 제공을 하고 있으나 해당 변수의 Class(남/녀) 통계 정보를 제공을 해주지 않아서 별도로 산출 프로그램 구현. (Class 값이 150개 이하)
* 오라클 DB 라이브러리 생성;
libname REAL1 oracle user="DB접속ID" password="DB접속패스워드" path="DB path" ADJUST_BYTE_SEMANTIC_COLUMN_LENGTHS=NO DBCLIENT_MAX_BYTES=1 INSERTBUFF=150000;
* 오라클 메타 테이블 ALL_TAB_COLUMNS을 사용하여서 해당 칼람의 class 개수가 150개 이하에 대하여 통계량 산출;
* 컬럼별 class 개수는 "NUM_DISTINCT" 이 값을 사용:
* 통계량 : 개별 컬럼의 class 별 건수;
* 첫 번째 작업에서는 산출 값에 따라 기준 테이블(target_table)을 생성;
* 이후 반복문에서 INSER INTO작업으로 통계량 적재;
DATA target_table;
LENGTH TABLE_NAME $128.
COLUMN_NAME $128.
COLUMN_ID $3.
COL_CLASS $128.
CNT 8.;
STOP;
RUN;
* 작업 테이블 지정;
data _null_;
set REAL1.ALL_TAB_COLUMNS(where=( OWNER = 'APCOM' AND
TABLE_NAME IN ('CUPT0000TB','CUPT0100TB') AND
NUM_DISTINCT BETWEEN 0 AND 150)) end=last;
/* if _n_ eq 1 then */
call execute('PROC SQL;
CREATE TABLE INSERT_DATA AS
select '||'"'||TABLE_NAME||'" AS TABLE_NAME,'
||'"'||COLUMN_NAME||'" AS COLUMN_NAME, '
||'"'||COMPRESS(PUT(COLUMN_ID,$3.))||'" AS COLUMN_ID,'
||compress(COLUMN_NAME)||' AS COL_CLASS,
COUNT(*) AS CNT
from '||cats('REAL1','.',TABLE_NAME)||' GROUP BY '||COLUMN_NAME||' ;
'|| '
DATA INSERT_DATA_1(RENAME=(COLUMN_ID_1=COLUMN_ID COL_CLASS_1 = COL_CLASS));
SET INSERT_DATA;
LENGTH COLUMN_ID_1 $3.
COL_CLASS_1 $128.;
COLUMN_ID_1 = COMPRESS(COLUMN_ID);
COL_CLASS_1 = COMPRESS(COL_CLASS);
DROP COLUMN_ID COL_CLASS;
RUN;
PROC SQL;
insert into target_table
select TABLE_NAME,
COLUMN_NAME,
COLUMN_ID,
COL_CLASS,
CNT
from INSERT_DATA_1 ;
');
run;
QUIT;
* 원본 오라클 메타데이터에 left join;
* 원본 컬럼 정보에 위 산출된 통계량 join;
PROC SQL;
CREATE TABLE WORK.TABLE_STAT AS
SELECT A.OWNER,
A.TABLE_NAME,
A.COLUMN_NAME,
A.DATA_TYPE,
A.COLUMN_ID,
A.NUM_DISTINCT,
B.COL_CLASS,
B.CNT
FROM REAL1.ALL_TAB_COLUMNS A
LEFT JOIN target_table B
ON A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME
where A.OWNER = 'APCOM'
AND A.TABLE_NAME IN ('CUPT0000TB','CUPT0100TB') /* 테이블 명*/
ORDER BY
A.TABLE_NAME,
A.COLUMN_ID,
B.COL_CLASS;
QUIT;
* 출처 : 기서무나구물 (http://statwith.com/sas-tip-%ec%98%a4%eb%9d%bc%ed%81%b4-%eb%a9%94%ed%83%80-%ec%a0%95%eb%b3%b4%eb%a5%...)
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.