BookmarkSubscribeRSS Feed

[SAS 고수의 팁] 그래프 템플릿과 ODS 그래픽 Procedures

Started ‎02-26-2022 by
Modified ‎02-26-2022 by
Views 2,563

 

 

STATGRAPH는 STYLE과 TABLE이 스타일 및 테이블 템플릿에 사용되는 정의와 마찬가지로 PROC TEMPLATE의 그래프 템플릿에 사용되는 템플릿 정의 이름입니다. GTL(Graph template Language)은 그래픽을 염두에 두고 특별히 설계된 PROC TEMPLATE 문의 하위 집합으로, 다른 템플릿 하위 집합과 유사하지만 몇 가지 고유한 기능이 있습니다.

그래프 템플릿은 다른 SAS 프로그램 단계(예: DATA 단계 또는 PROC SGRENDER)를 사용하여 렌더링(데이터로부터 이미지 생성)하여 표시해야 하기 때문에 기존의 SAS/GRAF 프로그램과 매우 다릅니다.

많은 SAS/STAT 절차에서 ODS Graphics 문을 그래프 주위에 추가하면 그래프를 생성할 수 있기 때문에 이전에 그래프 템플릿을 사용한 적이 있을 수 있습니다.

PROC REG는 다른 출력들 중에서 그래프의 진단 패널을 생성하여 다음 코드와 그림 아래에 표시된 것처럼 SAS 코드가 거의 없는 회귀 모델의 결과를 표시할 수 있습니다.

 

 

ODS GRAPHICS ON;
PROC REG DATA = sashelp.class;
MODEL height = age;
RUN;
ODS GRAPHICS OFF;

 

image (5).png

 

 

ODS Graphics Designer를 사용한 쉬운 그래프 템플릿 생성에서 생성된 템플릿을 업데이트하여 유연하고 재사용 가능한 템플릿을 만드는 기술에 대해 설명합니다.

 

 

 

ODS Graphics Procedures 

PROC SGPLOT, PROC SGPANEL 및 PROC SGSCATER

ODS 그래픽의 SAS 절차에 대해 설명합니다. 

 

 

PROC SGPLOT

 

PROC SGPLOT는 SAS 9.2에 도입되었으며 생성되는 대부분의 표준 그래프에 대해 PROC GPLOT와 PROC GCHART를 효과적으로 대체합니다. 또한 PROC SGPLOT는 그림을 동일한 축에 겹쳐서 결합할 수 있는 기능을 제공합니다.

그래프를 다시 만드는 PROC TEMPLATE 코드가 포함된 SAS 프로그램은 TMPLOUT= 옵션을 사용하여 sgplot_sas에 저장됩니다.

 

 

PROC SGPLOT DATA = plotdata_ods
(WHERE = (product = 'CHAIR'))
TMPLOUT = "sgplot_template.sas";
SERIES X = visitnum Y = value1 /
MARKERATTRS = (SIZE = 10PX)
LINEATTRS = (THICKNESS = 3PX)
GROUP = product;
SCATTER X = visitnum Y = value1 /
YERRORUPPER = value1_upper
YERRORLOWER = value1_lower
MARKERATTRS = (SIZE = 10PX)
GROUP = product;
REFLINE 1100 / AXIS = Y LINEATTRS = (PATTERN = DOT);
REFLINE 1300 / AXIS = Y LINEATTRS = (PATTERN = DOT);
RUN;

 

PROC GPLOT와 PROC SGPLOT에서 만든 그래프를 비교하면 기본 동작에서 여러 가지 분명한 차이를 확인할 수 있습니다. 특히 다른 SG Procedure와 마찬가지로 PROC SGPLOT에서 Y축 라벨이 회전하고 두 축의 눈금 표시가 감각적으로 간격을 두고 배치된다. 두 가지 기능은 모두 PROC GPLOT에서 사용할 수 있지만 사용하려면 추가 매개변수가 필요합니다.

PROC SGPLOT 예제에 의해 생성된 그래프 템플릿은 다음과 같습니다.

 

 

proc template;
define statgraph sgplot;
begingraph;
layout overlay;
SeriesPlot X='visitnum'n Y='value1'n / Group='PRODUCT'n
Markerattrs=( Size=10px)
Lineattrs=( Thickness=3px)
LegendLabel="Sales ($)"
NAME="series";
ScatterPlot X='visitnum'n Y='value1'n /
primary=true Group='PRODUCT'n
Markerattrs=( Size=10px)
YErrorUpper='value1_upper'n
YErrorLower='value1_lower'n
LegendLabel="Sales ($)"
NAME="SCATTER";
DiscreteLegend "series"/ title="Product";
endlayout;
endgraph;
end;
run;

 

 

PROC SGSCATTER

PROC SGSCATTER는 SAS 9.2에 도입되었으며 다양한 플롯 문을 가지고 있습니다.

MATRIX는 N × N의 하위 그래프 그리드를 생성하며, 여기서 각 변수는 대각선을 따라 변수 레이블 또는 각 변수의 그래프를 사용하여 다른 각 변수에 대해 플롯됩니다. COMEAR는 공통 축을 사용하여 여러 변수의 하위 그래프 행 또는 열을 만듭니다. 플롯은 지정된 변수 쌍으로 구성된 하나 이상의 산포 하위 그래프를 만듭니다.

MATRIX 문은 축의 대각선 및 눈금 표시를 따라 변수 레이블만 포함할 수 있습니다.

 

 

proc template;
define statgraph sgscatter;
begingraph / designwidth=640 designheight=640;
layout gridded;
layout lattice;
ScatterPlotMatrix Age Height Weight / NAME="MATRIX" Group=Sex;
endlayout;
DiscreteLegend "MATRIX" / order=rowmajor title="Sex";
endlayout;
endgraph;
end;
run;

 

 

 

image (6).png

 

 

그래프를 재생성하기 위한 PROC TEMPLATE 코드가 포함된 SAS 프로그램은 TMPLOUT= 옵션을 사용하여 sgscatter_matrix_matrix1.sas에 저장됩니다.

MATRIX 문은 또한 DAGRAIN= 옵션을 사용하여 대각선을 따라 있는 각 변수의 히스토그램, 정규 밀도 곡선 및 커널 밀도 추정치의 모든 조합을 포함할 수 있지만 이 옵션은 축에서 눈금 표시를 제거합니다. 아래의 그래프는 히스토그램만 보여줍니다.

 

 

PROC SGSCATTER DATA = sashelp.class
TMPLOUT = "sgscatter_matrix_template2.sas";
MATRIX age height weight / GROUP = sex DIAGONAL = (HISTOGRAM);
RUN;

proc template;
define statgraph sgscatter;
begingraph / designwidth=640 designheight=640;
layout gridded;
layout lattice;
ScatterPlotMatrix Age Height Weight /
NAME="MATRIX" Group=Sex
diagonal=( histogram );
endlayout;
DiscreteLegend "MATRIX" / order=rowmajor title="Sex";
endlayout;
endgraph;
end;
run;

 

image (7).png

 

 

 

아래의 그래프는 정규 밀도 곡선과 커널 밀도 추정치를 함께 보여줍니다. 그것은 히스토그램도 포함할 수 있습니다.

다음 코드는 아래의 그래프를 생성하는 데 사용되었으며, TMPLOUT= 옵션을 사용하여 SGscatter_matrix_matrix3.sas에 저장된 PROC TEMPLATE 코드를 사용했습니다.

 

 

 

PROC SGSCATTER DATA = sashelp.class
TMPLOUT = "sgscatter_matrix_template3.sas";
MATRIX age height weight / GROUP = sex DIAGONAL = (KERNEL NORMAL);
RUN;

proc template;
define statgraph sgscatter;
begingraph / designwidth=640 designheight=640;
layout gridded;
layout lattice;
ScatterPlotMatrix Age Height Weight /
NAME="MATRIX" Group=Sex
diagonal=( normal kernel );
endlayout;
DiscreteLegend "MATRIX" / order=rowmajor title="Sex";
endlayout;
endgraph;
end;
run;

 

 

 

PROC SGPANEL과 마찬가지로 PROC SGSCATER에서 생성된 것과 유사한 그래프를 생성하지만 PROC GREPLOT를 대신 사용하려면 PROC GREPLAY와 신중한 템플릿 설계 및 크기 조정이 필요합니다. 아래의 예제는 COMEAR 문을 사용하여 키와 몸무게를 연령별로 비교 그림으로 표시합니다.

 

 

PROC SGSCATTER DATA = sashelp.class
TMPLOUT = "sgscatter_template.sas";
COMPARE Y = (height weight) X = age /
GROUP = sex
MARKERATTRS = (SIZE = 10)
LOESS = (ALPHA=0.05)
GRID;
RUN;

 

 

PROC SGSCATTER 예제에서 생성된 그래프 템플릿은 아래와 같습니다.

 
 
proc template;
define statgraph sgscatter;
begingraph / designwidth=480 designheight=640;
DiscreteAttrVar attrvar=__ATTRVAR1__
var=Sex attrmap="__ATTRMAP__";
DiscreteAttrVar attrvar=__ATTRVAR1__
var=eval(sort(Sex, RETAIN=ALL)) attrmap="__ATTRMAP__";
DiscreteAttrMap name="__ATTRMAP__" / autocycleattrs=1;
Value "M";
Value "F";
EndDiscreteAttrMap;
layout gridded;
layout lattice / columnDataRange=union;
ColumnAxes;
ColumnAxis / griddisplay=on;
EndColumnAxes;
layout overlay /
xaxisopts=( griddisplay=on) yaxisopts=( griddisplay=on);
ScatterPlot X=Age Y=Height /
primary=true Group=__ATTRVAR1__
Markerattrs=( Size=10) NAME="COMPARE";
LoessPlot X=Age Y=Height / Group=__ATTRVAR1__ Alpha=0.05;
endlayout;
layout overlay /
xaxisopts=( griddisplay=on) yaxisopts=( griddisplay=on);
ScatterPlot X=Age Y=Weight /
primary=true Group=__ATTRVAR1__
Markerattrs=( Size=10);
LoessPlot X=Age Y=Weight / Group=__ATTRVAR1__ Alpha=0.05;
endlayout;
endlayout;
DiscreteLegend "COMPARE" / order=rowmajor title="Sex";
endlayout;
endgraph;
end;
run;
​
 
image (8).png

 

 

아래의 플롯문은 그림 에 표시된 것과 같은 옵션을 사용하여 지정된 그래프의 그리드를 생성합니다.

다음 코드는 PROC TEMPLATE 코드가 저장된 이 그래프를 생성하는 데 사용되었습니다.

tmPLOUT= 옵션을 사용하여 sgscatter_plot_sas를 실행합니다.

 

 

PROC SGSCATTER DATA = sashelp.class
TMPLOUT = "sgscatter_plot_template.sas";
PLOT (height weight)*age height*weight /
GROUP = sex LOESS = (ALPHA=0.05);
RUN;

proc template;
define statgraph sgscatter;
begingraph / designwidth=640 designheight=640;
DiscreteAttrVar attrvar=__ATTRVAR1__
var=Sex attrmap="__ATTRMAP__";
DiscreteAttrVar attrvar=__ATTRVAR1__
var=eval(sort(Sex, RETAIN=ALL)) attrmap="__ATTRMAP__";
DiscreteAttrMap name="__ATTRMAP__" / autocycleattrs=1;
Value "M";
Value "F";
EndDiscreteAttrMap;
layout gridded;
layout lattice / rowgutter=10 columngutter=10 columns=2;
layout overlay;
ScatterPlot X=Age Y=Height /
primary=true Group=__ATTRVAR1__ NAME="PLOT";
LoessPlot X=Age Y=Height / Group=__ATTRVAR1__ Alpha=0.05;
endlayout;
layout overlay;
ScatterPlot X=Age Y=Weight / primary=true Group=__ATTRVAR1__;
LoessPlot X=Age Y=Weight / Group=__ATTRVAR1__ Alpha=0.05;
endlayout;
layout overlay;
ScatterPlot X=Weight Y=Height /
primary=true Group=__ATTRVAR1__;
LoessPlot X=Weight Y=Height / Group=__ATTRVAR1__ Alpha=0.05;
endlayout;
endlayout;
DiscreteLegend "PLOT" / order=rowmajor title="Sex";
endlayout;
endgraph;
end;
run;

 

image (9).png

 

Version history
Last update:
‎02-26-2022 12:28 PM
Updated by:
Contributors

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Article Labels
Article Tags