%let dset = sashelp.air; /* Your dataset */ %let xVar = date; /* X variable */ %let yVar = air; /* Y variable */ %let xVarRange = .; %let yVarRange = .; /* Get data range */ proc means data=&dset noprint; output out=minmax min(&xVar &yVar)=minX minY max(&xVar &yVar)=maxX maxY; run; data _null_; set minmax end=done; if done then do; call symputx('xVarRange', maxX - minX); call symputx('yVarRange', maxY - minY); end; run; * %put xvarrange &xVarRange yvarrange &yVarRange; data slopes /* (keep=dSlope) */; set &dset; retain prevX prevY; if _n_ > 1 then do; dx = (&xVar - prevX) ; dy = (&yVar - prevY) ; dSlope = abs(dy/dx); end; prevX = &xVar; prevY = &yVar; run; /* Get median of the absolute slopes */ proc means data=slopes noprint; output out=mSlope median(dSlope)= ; run; data _null_; set mSlope end=done; if done then do; /* NOTE: GTL aspectRatio is the inverse of width/height */ call symputx('medianAbsSlopeAspect', &yVarRange / (dSlope * &xVarRange.)); end; run; * %put &medianAbsSlopeAspect; proc template; define statgraph aspect_MAS; dynamic dynAspect "Aspect Ratio = height/width"; begingraph / designHeight=200px; entrytitle 'International Air Travel, aspectRatio = ' dynAspect; layout overlay / aspectRatio=dynAspect yAxisOpts=(label="Travel (x1000)") xAxisOpts=(label="Year"); seriesPlot x=&xVar y=&yVar; endlayout; endgraph; end; run; proc sgrender data=&dset template=aspect_MAS; * dynamic dynAspect='auto'; dynamic dynAspect=&medianAbsSlopeAspect; run;