代码:
%macro group_by_uni_score (raw_data=,res_data=,group_by=,group=);
%let interval=%eval(100/&group.);
proc sort data=&raw_data.;by &group_by.;run;
proc univariate data=&raw_data.(keep=&group_by.) noprint;
var &group_by.;
output out=t pctlpre=p_ pctlpts=0 to 100 by &interval.;
run;
proc transpose data=t out=tt;run;
data _null_;
set tt;
call symput(_name_,col1);
run;
data &res_data;
set &raw_data.;
%do group_id=1 %to &group;
%let p_end=%eval(&interval.*&group_id);
%if &group_id=1 %then %do;
if &group_by<&&p_&p_end. then group=&group_id;
%end;
%if &group_id.<&group. %then %do;
else if &group_by<&&p_&p_end. then group=&group_id;
%end;
%else %do;
else group=&group_id;
%end;
%end;
run;
%mend;
%group_by_uni_score(raw_data=sashelp.class,res_data=calss,group_by=age,group=4);
本段代码主要功能是按照4分位数对样本进行分组。
其中,对代码中跨条件使用if else条件非常困惑,有大神帮忙分析下其运行逻辑吗?