OPTION NOCENTER LS=MAX PS=MAX OBS=MAX MACROGEN; LIBNAME A '.'; OPTIONS FMTSEARCH=(A); /*附录宏*/ %MACRO M_APPENDIX_FORMAT(N1); %IF %INDEX(&LVARNAME,&N1.) %THEN %DO; %DO K=1 %TO &LA_LEN.; %LET AN=%SCAN(&LVARNAME.,&K.); %LET AC=%SCAN(&LA.,&K.); %IF &AN.=&N1. %THEN %DO; FORMAT &N1. $&AC._FMT.; %END; %END; %END; %ELSE %DO; FORMAT &N1. $3.; %END; %MEND; %LET NL=%SYSFUNC(COUNTW(&NLIST.));/*变量个数*/ %LET LVARNAME=IDENTITEY_TYPE BUSINESS_ORG_TYPE BUSINESS_TYPE PAYBACK_PERSON_TYPE CLASS5_STATE CURRENCY PAYMENT_STAUTS;/*附录变量*/ %LET LA=A1 A18 A20 A44 A58 A32 A33;/*变量对应附录*/ %LET LA_LEN=%SYSFUNC(COUNTW(&LVARNAME.)); %M_APPENDIX_FORMAT(IDENTITEY_TYPE); LIBNAME XLS EXCEL '36.xls'; %LET OUTPUTDATA=PCR_BASEINFO; %MACRO CHECK; /*1、检查表结构-保留字段:变量序号、变量名、变量标签、变量类型、变量长度*/ PROC CONTENTS DATA=A.&OUTPUTDATA OUT=temp_t1(KEEP=VARNUM NAME LABEL TYPE LENGTH) NOPRINT VARNUM; RUN; PROC SORT DATA=temp_t1; BY VARNUM; RUN; DATA XLS.CONTENTS; SET temp_t1; RUN; /*2、打印前100条记录查看*/ DATA XLS.TOP100; SET A.&OUTPUTDATA(OBS=100); RUN; /*3、唯一性检查和关联关系检查*/ PROC SORT DATA=A.&OUTPUTDATA(KEEP=REPORT_NO IDENTITEY_TYPE BUSINESS_ORG_TYPE BUSINESS_ORG BUSINESS_TYPE) OUT=NODUP DUPOUT=XLS.REPORT_NO_DUP NODUPKEY; BY REPORT_NO IDENTITEY_TYPE BUSINESS_ORG_TYPE BUSINESS_ORG BUSINESS_TYPE; RUN; DATA XLS.DATE_XC; SET A.&OUTPUTDATA; MON=INTCK("MONTH",OPEN_DATE,PUTOUT_DATE); IF MON<0 AND MON^=.; RUN; /*4、查看数据集频数分布*/ PROC SQL NOPRINT; SELECT NAME INTO:NLIST SEPARATED BY ' ' FROM temp_t1;/*变量列表*/ SELECT TYPE INTO:TLIST SEPARATED BY ' ' FROM temp_t1;/*变量类型*/ QUIT; %LET NL=%SYSFUNC(COUNTW(&NLIST.));/*变量个数*/ %LET LVARNAME=IDENTITEY_TYPE BUSINESS_ORG_TYPE BUSINESS_TYPE PAYBACK_PERSON_TYPE CLASS5_STATE CURRENCY PAYMENT_STAUTS;/*附录变量*/ %LET LA=A1 A18 A20 A44 A58 A32 A33;/*变量对应附录*/ %LET LA_LEN=%SYSFUNC(COUNTW(&LVARNAME.)); /*计算字符型变量长度*/ DATA temp_t2; SET A.&OUTPUTDATA(DROP=); %DO I=1 %TO &NL.; %LET N1=%SCAN(&NLIST.,&I.); %LET T1=%SCAN(&TLIST.,&I.); %IF &T1=2 %THEN %DO; &N1._len=LENGTH(&N1.); %END; %END; RUN; %DO I=1 %TO &NL.; %LET N1=%SCAN(&NLIST.,&I.); %LET T1=%SCAN(&TLIST.,&I.); %IF &T1=1 %THEN %DO;/*数值型-检查统计量*/ PROC SUMMARY DATA=A.&OUTPUTDATA N NMISS MAX MIN ; VAR &N1; OUTPUT OUT=XLS.&N1.; RUN; %END; %ELSE %DO;/*字符型-检查变量值前两位和变量值长度*/ PROC FREQ DATA=temp_t2; TABLES &N1./MISSING OUT=XLS.&N1.; %M_APPENDIX_FORMAT(&N1.); RUN; PROC FREQ DATA=temp_t2 NOPRINT; TABLES &N1._len/MISSING OUT=XLS.&N1._len; RUN; %END; %END; %MEND; %CHECK;