SAS/ETS Examples
Calculating Price Elasticity of Demand
Contents |
Back to Example
/*-----------------------------------------------------------------
Example: Calculating Price Elasticity of Demand
Requires: SAS/ETS, SAS/IML
Version: 9.0
------------------------------------------------------------------*/
data a ;
input yr qtr q p ;
date = yyq(yr,qtr) ;
format date yyq6. ;
lq = log(q) ;
lp = log(p) ;
datalines;
1977 1 22.9976 142.1667
1977 2 22.6131 143.9333
1977 3 23.4054 146.5
1977 4 22.7401 150.8
1978 1 22.0441 160
1978 2 21.7602 182.5333
1978 3 21.6064 186.2
1978 4 21.8814 186.4333
1979 1 20.5086 211.7
1979 2 19.0408 231.5
1979 3 19.1457 222.7
1979 4 19.3989 223.8333
1980 1 18.947 231.1667
1980 2 18.898 227.5
1980 3 19.2127 237.5333
1980 4 19.4988 238.1667
1981 1 19.3429 233.5
1981 2 18.9816 230.7
1981 3 19.6459 239.0333
1981 4 19.2868 235.4333
1982 1 18.8193 233.3
1982 2 18.7968 242.9667
1982 3 19.9882 244.0333
1982 4 19.4242 233.1333
1983 1 19.2252 233.8667
1983 2 19.3361 240.9333
1983 3 20.4952 234.3667
1983 4 19.5995 227.1667
1984 1 19.3191 238.4667
1984 2 19.3744 238
1984 3 19.9738 232.2
1984 4 19.7597 233.2333
1985 1 19.0586 234.9
1985 2 20.0757 230.4333
1985 3 20.8175 222.7333
1985 4 19.2488 226.4333
1986 1 19.0212 229.2667
1986 2 20.1607 222.9
1986 3 20.7108 225.6333
1986 4 18.9416 229.3
1987 1 18.2746 230.6
1987 2 18.5266 239.1
1987 3 19.175 242.1667
1987 4 17.8807 241.6667
1988 1 18.1678 241.7333
1988 2 18.4639 250.1
1988 3 18.7622 254.5333
1988 4 17.2552 255
1989 1 16.9765 260.7
1989 2 17.5192 266.9667
1989 3 17.5975 268.0333
1989 4 17.2416 266.9333
1990 1 16.5516 272.6333
1990 2 17.3763 281.2
1990 3 17.4207 280.3667
1990 4 16.4315 289.8667
1991 1 15.9842 294.2667
1991 2 17.0449 295.2
1991 3 17.5591 284.6333
1991 4 16.2093 279.2
1992 1 16.3952 282.2667
1992 2 16.9538 286.8333
1992 3 17.227 282.6667
1992 4 15.9093 286.6667
1993 1 15.8915 292.1333
1993 2 16.2058 300.4
1993 3 17.043 292
1993 4 15.9513 289.2333
1994 1 16.2494 286.6667
1994 2 16.8868 286.1667
1994 3 17.3775 279.5
1994 4 16.4723 279.1667
1995 1 16.3097 283.8667
1995 2 17.0895 283.1
1995 3 17.647 285.1
1995 4 16.3476 285.2667
1996 1 17.0783 278.7
1996 2 17.6763 277.4
1996 3 17.1606 279.8
1996 4 16.2764 285.0333
1997 1 16.2921 278.8
1997 2 17.2994 278.9667
1997 3 17.0513 281.0667
1997 4 16.2354 279.3
1998 1 16.6884 273.4667
1998 2 17.1985 278.1
1998 3 17.5085 277.3667
1998 4 16.6475 279.5333
1999 1 16.6785 278
1999 2 17.7635 284.7667
1999 3 17.6689 289.2333
;
run ;
proc autoreg data=a outest=estb ;
model lq = lp ;
output out=out1 r=resid1 ;
title "OLS Estimates";
run ;
proc autoreg data=a outest=estb ;
model lq = lp / nlag=(1 4) method=ml ;
output out=out2 r=resid2 ;
title "OLS, Autocorrelations, & ML";
run ;
data plot2 ;
merge out1 out2 a ;
run ;
proc gplot data=plot2 ;
title 'OLS Model Residual Plot' ;
axis1 label=(angle=90 'Residuals') ;
axis2 label=('Date') ;
symbol1 c=blue i=needle v=none ;
plot resid1*date / cframe=ligr haxis=axis2 vaxis=axis1 ;
run ;
proc autoreg data=a outest=estb ;
model lq = lp / nlag=(1 4) method=ml ;
output out=out2 r=resid2 ;
title "OLS, Autocorrelations, & Maximum Likelihood Estimates";
run ;
proc gplot data=plot2 ;
title 'Autoregressive Error Model Residual Plot' ;
axis1 label=(angle=90 'Residuals') ;
axis2 label=('Date') ;
symbol1 c=blue i=needle v=none ;
plot resid2*date / cframe=ligr haxis=axis2 vaxis=axis1 ;
run ;
proc iml ;
use estb ;
read all var {intercept lp} ;
close estb ;
x = (100:300)` ;
x = log(x) ;
y = intercept + lp*x ;
all = y || x ;
create outset from all ;
append from all ;
quit ;
data plot ;
set outset(rename=(col1=y col2=x)) ;
run ;
proc gplot data=plot ;
title 'Demand for Beef' ;
axis1 label=(angle=90 'log of quantity') ;
axis2 label=('log of price') ;
symbol color=blue interpol=join value=none ;
plot y*x / cframe=ligr vaxis=axis1 haxis=axis2 ;
run ;