Если вы хотите выполнить регрессию, используя только часть ваших данных, вы можете отфильтровать ее в самом proc reg
:
proc reg data=mydata (where=(X1 Between Q1 and Q3 and X2 > 100))
PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
model Y = X1 X2 X3;
То есть, если Q1
и Q3
являются полями в myData
. Если нет, вы можете создать для них макропеременные. Например
%let Q1 = 50;
%let Q3 = 250;
proc reg data=mydata (where=(X1 Between &Q1. and &Q3. and X2 > 100))
PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
model Y = X1 X2 X3;
Это если вы заранее знаете Q1 и Q3.
Если Q1
и Q3
являются полями в другом наборе данных, proc sql
с select Q1, Q3. into :Q1, :Q3
или шаг данных с call symput('Q1', Q1); call symput('Q3', Q3);
могут выполнить эту работу.
Отредактируйте после прочтения вашего комментария, объясняющего, что Q1
и т. д. являются квантилями:
Следующий пример может содержать все необходимые строительные блоки.
ods graphics on;
proc means data=SASHELP.CLASS noprint;
var Height Weight;
output out=CLASS_Q
P25(Height Weight)=Height_Q1 Weight_Q1
P75(Height Weight)=Height_Q3 Weight_Q3;
run;
data _NULL_;
set CLASS_Q;
call symput('Height_Q1', Height_Q1);
call symput('Height_Q3', Height_Q3);
call symput('Weight_Q1', Weight_Q1);
call symput('Weight_Q3', Weight_Q3);
run;
%put _user_; *just to debug;
proc reg data=SASHELP.CLASS
(where=(Height Between &Height_Q1. and &Height_Q3. and Weight > &Weight_Q1.))
PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
model Age = Height Weight;
run;
person
Dirk Horsten
schedule
04.01.2016
Q1
иQ3
? - person Dirk Horsten   schedule 04.01.2016Q1
этоP25
это 25-й процентиль, верно? Есть как минимум два способа их создания:proc univariate
иproc means
. - person Dirk Horsten   schedule 06.01.2016P25
, x между его первым и третьим квантилемP25
иP75
и x выше его третьего квантиля, ваша модель не будет непрерывной. Это проблема? - person Dirk Horsten   schedule 06.01.2016