1. 程式人生 > >SAS 統計某個資料集各個欄位頻數,並彙集到一個表中

SAS 統計某個資料集各個欄位頻數,並彙集到一個表中

/*統計表的欄位*/
PROC CONTENTS DATA=SASHELP.CLASS NOPRINT OUT=CA(KEEP=NAME);
    
RUN;

/*提取表的變數名*/
PROC SQL NOPRINT;
SELECT NAME INTO:A SEPARATED BY ' ' FROM CA;
RUN;
QUIT;


%LET I=1;

/*計算各個變數的頻數,並存放在一個數據集中*/

%MACRO M_A();

    PROC FREQ DATA=SASHELP.CLASS;
        %DO %UNTIL(%SCAN(&A.,&I,'
')=); %LET NI=%SCAN(&A,&I,' '); TABLES &NI/MISSING OUT=&NI(RENAME=(&NI=NAME)) NOPRINT; %LET i = %eval(&i.+1); %PUT "&I.=" &NI.; %END; RUN; %LET I=1; %DO %UNTIL(%SCAN(&A.,&I,'
')=); %LET NI=%SCAN(&A,&I,' '); DATA &NI.; LENGTH VAR $30. VAL $40.; SET &NI.; VAR="&NI."; VAL=CATS(NAME,''); DROP NAME; RUN; PROC APPEND BASE=D DATA=&NI.; RUN;
%LET i = %EVAL(&i.+1); %PUT "&I.=SSSSSSS" &NI.; %END; PROC PRINT DATA=D; RUN; %MEND; %M_A();