%MACRO Stepa;
DATA Freq_a;
SET &Dataset;
Treat=(&Group=1)*1+(&Group=2)*0;
Control=(&Group=1)*0+(&Group=2)*1;
RUN;
PROC MEANS DATA=Freq_a NOPRINT;
CLASS &Cat_var;
VAR Treat Control; OUTPUT OUT=Freq_b SUM=/AUTONAME;
WAYS 1;
RUN;
%GLOBAL Total_treat Total_control;
PROC SQL NOPRINT;
SELECT COUNT(*) INTO:Total_treat FROM &Dataset WHERE &Group=1;
SELECT COUNT(*) INTO:Total_control FROM &Dataset WHERE &Group=2;
QUIT;
DATA Freq_c;
SET Freq_b;
LENGTH Variable Level $200.;
Treat=CATS(Treat_sum,"(", PUT((Treat_sum/&Total_treat)*100, 8.1),")");
Control=CATS(Control_sum,"(",PUT((Control_sum/&Total_control)*100, 8.1),")");
%DO i=1 %TO &CAT_n;
IF %SCAN(&Cat_var,&i) THEN DO;
Variable="%SCAN(&Cat_var,&i)";
Index=%SCAN(&Cat_var,&i);
Level=PUT(%SCAN(&Cat_var,&i),%SCAN(&Cat_var,&i).);
DATA Freq_e(KEEP=Variable Prob);
SET Freq_d;
Variable=SCAN(Table,-1,"");
WHERE Statistic="Chi-Square" or Statistic="卡方";
RUN;
/* 合并卡方与频数数据集*/
PROC SORT DATA=Freq_c;
BY Variable;
PROC SORT DATA=Freq_e;
BY Variable;
RUN;
DATA Freq_f;
MERGE Freq_c Freq_e;
BY Variable;
KEEP Variable Level Treat Control Index Prob;
RUN;