Assorted MODEL Statement Details for PROC TRANSREG
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: TREGMOD */
/* TITLE: Assorted MODEL Statement Details for PROC TRANSREG */
/* PRODUCT: STAT */
/* SYSTEM: ALL */
/* KEYS: regression analysis, transformations */
/* PROCS: TRANSREG */
/* DATA: */
/* */
/* SUPPORT: saswfk UPDATE: July 25, 2010 */
/* REF: PROC TRANSREG, DETAILS, MODEL */
/* MISC: */
/****************************************************************/
title 'Missing Data';
data x;
input y x1 x2 @@;
datalines;
1 3 7 8 3 9 1 8 6 . . 9 3 3 9
8 5 1 6 7 3 2 7 2 1 8 2 . 9 1
;
proc transreg solve;
model linear(y) = linear(x1 x2);
output;
run;
proc print;
run;
title 'Redundancy Analysis';
data x;
input y1-y3 x1-x4;
datalines;
6 8 8 15 18 26 27
1 12 16 18 9 20 8
5 6 15 20 17 29 31
6 9 15 14 10 16 22
7 5 12 14 6 13 9
3 6 7 2 14 26 22
3 5 9 13 18 10 22
6 3 11 3 15 22 29
6 3 7 10 20 21 27
7 5 9 8 10 12 18
;
proc transreg data=x tstandard=z method=redundancy;
model identity(y1-y3) = identity(x1-x4);
output out=red mredundancy replace;
run;
proc print data=red(drop=Intercept);
format _numeric_ 4.1;
run;
proc standard data=x out=std m=0 s=1;
title2 'Manually Generate Redundancy Variables';
run;
proc reg noprint data=std;
model y1-y3 = x1-x4;
output out=p p=ay1-ay3;
quit;
proc princomp data=p cov noprint std out=p;
var ay1-ay3;
run;
proc print data=p(keep=Prin:);
format _numeric_ 4.1;
run;
proc reg data=p outest=redcoef noprint;
title2 'Manually Create Redundancy Coefficients';
model Prin1-Prin3 = x1-x4;
quit;
proc print data=redcoef(keep=x1-x4);
format _numeric_ 4.1;
run;
proc reg data=p outest=redcoef2 noprint;
title2 'Manually Create Other Coefficients';
model x1-x4 = prin1-prin3;
quit;
proc print data=redcoef2(keep=Prin1-Prin3);
format _numeric_ 4.1;
run;
title 'ANOVA Output Data Set Example';
data ReferenceCell;
input y x1 $ x2 $;
datalines;
11 a a
12 a a
10 a a
4 a b
5 a b
3 a b
5 b a
6 b a
4 b a
2 b b
3 b b
1 b b
;
* Fit Reference Cell Two-Way ANOVA Model;
proc transreg data=ReferenceCell;
model identity(y) = class(x1 | x2);
output coefficients replace predicted residuals;
run;
* Print the Results;
proc print;
run;
proc contents position;
ods select position;
run;
title 'Output Data Set for Curve Fitting Example';
data a;
do x = 1 to 100;
y = log(x) + sin(x / 10) + normal(7);
output;
end;
run;
proc transreg;
model identity(y) = spline(x / nknots=9);
output predicted out=b;
run;
proc contents position;
ods select position;
run;
title 'METHOD=MORALS Output Data Set Example';
data x;
input y1 y2 x1 $ x2 $;
datalines;
11 1 a a
10 4 b a
5 2 a b
5 9 b b
4 3 c c
3 6 b a
1 8 a b
;
* Fit Reference Cell Two-Way ANOVA Model;
proc transreg data=x noprint solve;
model spline(y1 y2) = opscore(x1 x2 / name=(n1 n2));
output coefficients predicted residuals;
id x1 x2;
run;
* Print the Results;
proc print;
run;
proc contents position;
ods select position;
run;
data htex;
do i = 0.5 to 10 by 0.5;
x1 = log(i);
x2 = sqrt(i) + sin(i);
x3 = 0.05 * i * i + cos(i);
y = x1 - x2 + x3 + 3 * normal(7);
x1 = x1 + normal(7);
x2 = x2 + normal(7);
x3 = x3 + normal(7);
output;
end;
run;
proc transreg data=htex ss2 short;
title 'Fit a Polynomial Regression Model with PROC TRANSREG';
model identity(y) = spline(x1);
run;
data htex2;
set htex;
x1_1 = x1;
x1_2 = x1 * x1;
x1_3 = x1 * x1 * x1;
run;
proc reg;
title 'Fit a Polynomial Regression Model with PROC REG';
model y = x1_1 - x1_3;
quit;
title 'Two-Variable Polynomial Regression';
proc transreg data=htex ss2 solve;
model identity(y) = spline(x1 x2);
run;
proc transreg noprint data=htex maxiter=0;
/* Use PROC TRANSREG to prepare input to PROC REG */
model identity(y) = pspline(x1 x2);
output out=htex2;
run;
proc reg data=htex2;
model y = x1_1-x1_3 x2_1-x2_3;
test x1_1, x1_2, x1_3;
test x2_1, x2_2, x2_3;
quit;
title 'Monotone Splines';
proc transreg data=htex ss2 short;
model identity(y) = mspline(x1-x3 / nknots=3);
run;
title 'Transform Dependent and Independent Variables';
proc transreg data=htex ss2 solve short;
model spline(y) = spline(x1-x3);
run;
data oneway;
input y x $;
datalines;
0 a
1 a
2 a
7 b
8 b
9 b
3 c
4 c
5 c
;
title 'Implicit Intercept Model';
proc transreg ss2 data=oneway short;
model identity(y) = class(x / zero=none);
output out=oneway2;
run;
proc reg data=oneway2;
model y = xa xb xc; /* Implicit Intercept ANOVA */
model y = xa xb xc / noint; /* Implicit Intercept Regression */
quit;
title 'Using PROC TRANSREG to Create a Design Matrix';
data a;
do y = 1, 2;
do a = 1 to 4;
do b = 1 to 3;
w = ceil(uniform(1) * 10 + 10);
output;
end;
end;
end;
run;
proc transreg data=a design;
model class(a b / deviations);
id y w;
output out=coded;
run;
proc print;
title2 'PROC TRANSREG Output Data Set';
run;
title2 'PROC LOGISTIC with Classification Variables';
proc logistic;
freq w;
model y = &_trgind;
run;
title2 'PROC CATMOD Should Produce the Same Results';
proc catmod data=a;
model y = a b;
weight w;
run;
title 'Choice Model Coding';
data design;
array p[4];
input p1-p4 @@;
set = _n_;
do brand = 1 to 4;
price = p[brand];
output;
end;
brand = .; price = 1.49; output; /* constant alternative */
keep set brand price;
datalines;
1.49 1.99 1.49 1.99 1.99 1.99 2.49 1.49 1.99 1.49 1.99 1.49
1.99 1.49 2.49 1.99 1.49 1.49 1.49 1.49 2.49 1.49 1.99 2.49
1.49 1.49 2.49 2.49 2.49 2.49 1.49 1.49 1.49 2.49 2.49 1.99
2.49 2.49 2.49 1.49 1.99 2.49 1.49 2.49 2.49 1.99 2.49 2.49
2.49 1.49 1.49 1.99 1.49 1.99 1.99 1.49 2.49 1.99 1.99 1.99
1.99 1.99 1.49 2.49 1.99 2.49 1.99 1.99 1.49 2.49 1.99 2.49
;
proc transreg data=design design norestoremissing nozeroconstant;
model class(brand / zero=none) identity(price);
output out=coded;
by set;
run;
proc print data=coded(firstobs=21 obs=25);
var set brand &_trgind;
run;