BookmarkSubscribeRSS Feed

[SAS 고수의 팁] SAS/GRAPH에서 주석달기

Started ‎02-27-2022 by
Modified ‎02-27-2022 by
Views 1,318

 

 

 

이전 게시글은 간단한 PROC SGPLOT 또는 PROC SGPANEL 코드를 사용하여 많은 표준 SAS/GRAPH 플롯을 ODS Graphics로 쉽게 변환할 수 있는지 설명하였습니다.

SAS/GRAPH 주석 코드는 언뜻 보기에는 ODS 그래픽으로 변환하기가 훨씬 어려워 보이지만, 레이어 기능을 사용하여 많은 주석 그림을 유연하고 반복 가능한 방식으로 복제할 수 있습니다. 이번 게시글에서는 ODS 그래픽만 사용하는 동등한 코드로 주석이 달린 그래프를 생성하기 위해 일반적으로 사용되는 Annotate 및 SAS/GRAPH 코드의 출력을 비교합니다.

 

 

 

 

Error Bars

Error Bars Plot은 수집된 데이터를 표시하기 위해 임상 시험에서 광범위하게 사용e됩니다. (시간 경과에 따른 실험실 테스트 결과 등 연구 약물에 의한 효과 또는 효과 부족을 입증) 이러한 유형의 플롯은 종종 산점도 및 상당한 양의 주석을 사용하여 만들어집니다.

SAS/GRAF(class_error_classic) 및 ODS Graphics(class_error_ods)의 샘플 데이터는 다음 코드를 사용하여 생성됩니다.

 

PROC SORT DATA = sashelp.class OUT = class_error;
BY sex height;
RUN;
PROC SUMMARY DATA = class_error NWAY;
CLASS sex;
VAR weight;
OUTPUT OUT = class_error_se STDERR = weight_se;
RUN;
DATA class_error_classic (KEEP = sex height value)
class_error_ods (KEEP = sex height value value_upper value_lower)
;
MERGE class_error class_error_se;
BY sex;
value = weight;
value_upper = value + weight_se;
value_lower = value - weight_se;
OUTPUT class_error_ods;
OUTPUT class_error_classic;
value = value_upper;
OUTPUT class_error_classic;
value = value_lower;
OUTPUT class_error_classic;
RUN;

 

 

image (10).png

 

 

 

 

 

 

 

1.PROC GPLOT Error-Bar Plot

HILOTJ 보간법(interpolation) 대신 PROC GPLOT 및 Annotate를 사용하여 오류 막대 그림을 만들 수 있습니다.

 

%LET height_offset = 0.3;
DATA class_error_anno;
SET class_error_ods;
BY sex;
LENGTH function $8
color $20
when xsys ysys $1
x y 8
;
xsys = '2';
ysys = '2';
when = 'A';
IF sex = 'M' THEN color = 'RED';
ELSE color = 'BLUE';
function = 'MOVE';
x = height - &height_offset.;
y = value_upper;
OUTPUT;
function = 'DRAW';
x = height + &height_offset.;
y = value_upper;
OUTPUT;
function = 'MOVE';
x = height;
y = value_upper;
OUTPUT;
function = 'DRAW';
x = height;
y = value_lower;
OUTPUT;
function = 'MOVE';
x = height - &height_offset.;
y = value_lower;
OUTPUT;
function = 'DRAW';
x = height + &height_offset.;
y = value_lower;
OUTPUT;
RUN;
PROC GPLOT DATA = class_error ANNO = class_error_anno;
SYMBOL V = CIRCLE I = JOIN;
PLOT weight * height = sex / VAXIS = 40 TO 160 BY 10;
LABEL weight = "Weight";
RUN;
​

image (11).png

 

 

 

 

2. ODS Graphics

오류 표시줄은 YERROUPER= 및 YERROLOWER= 매개변수를 사용하여 그릴 수 있습니다.

 

PROC SGPLOT DATA = class_error_ods;
SCATTER Y = value X = height / GROUP = sex YERRORUPPER = value_upper
YERRORLOWER = value_lower;
SERIES Y = value X = height / GROUP = sex;
LABEL value = "Weight";
RUN;

 

 image (12).png

 

 

 

 

 

Point Labels

개별 점을 식별할 수 있도록 산점도에서 특정 점에 레이블을 지정하는 것이 자주 유용합니다. 모든 점에 레이블이 지정됩니다. 다른 상황에서는 모든 점에 레이블을 지정할 필요가 없으므로 중요한 피쳐가 있는 점의 부분 집합에만 레이블을 지정할 수 있습니다. SAS/GRAF(class_point_classic) 및 ODS Graphics(class_point_ods)의 샘플 데이터는 다음 코드를 사용하여 생성됩니다.

 

PROC SORT DATA = sashelp.class OUT = class_point;
BY sex height;
RUN;
DATA class_point_ods;
SET class_point;
If sex = 'F' THEN weight2 = weight + 10;
ELSE weight2 = weight - 10;
RUN;

 

 

 

1. SAS/GRAPH 

PROC GPLOT 및 Annotate를 사용하여 점 레이블 그림을 작성할 수 있습니다.

 

 

DATA class_point_anno;
SET class_point_ods;
BY sex;
LENGTH function $8
color $20
position when xsys ysys hsys $1
x y size 8
;
xsys = '2';
ysys = '2';
hsys = 'D';
when = 'A';
size = '8';
IF sex = 'M' THEN color = 'RED';
ELSE color = 'BLUE';
function = 'LABEL';
x = weight2;
y = height;
text = name;
position = '+';
OUTPUT;
RUN;
PROC GPLOT DATA = class_point ANNO = class_point_anno;
SYMBOL V = CIRCLE;
PLOT height * weight = sex;
RUN;

 

 image (13).png

 

 

 

 

 

 

2. ODS Graphics

point label 은 scatter을 사용하여 표시합니다.

 

PROC SGPLOT DATA = class_point_ods;
SCATTER Y = height X = weight / GROUP = sex;
SCATTER Y = height X = weight2 / GROUP = sex MARKERCHAR = name;
RUN;

 

 image (14).png

 

 

 

 

 

Bar Labels

SAS/GRAPH에서 단순 플롯 옵션으로 막대에 레이블을 지정할 수 있지만, SAS/GRAPH를 사용하여 스택 막대 차트에서 개별 막대 세그먼트에 레이블을 지정하려면 주석 코드가 필요합니다. SAS/GRAF(class_bar) 및 ODS Graphics(class_bar_ods)의 샘플 데이터는 다음 코드를 사용하여 생성됩니다.

 

 

PROC SUMMARY DATA = sashelp.class NWAY;
CLASS age sex;
VAR height;
OUTPUT OUT = class_bar N = count;
RUN;
DATA class_bar_ods;
SET class_bar;
BY age sex;
LENGTH ccount $1;
RETAIN total_count .;
ccount = STRIP(PUT(count, 1.));
IF FIRST.age THEN DO;
total_count = 0;
count_ods = count - 0.5;
END;
ELSE DO;
count_ods = count;
END;
total_count + count;
total_count_ods = total_count - 0.5;
IF sex = 'F' THEN total_count_odsf = total_count_ods;
ELSE total_count_odsm = total_count_ods;
RUN;

 

 

1. SAS/GRAPH

막대 라벨 플롯은 아래와 같이 PROC GCHART 및 Annotate를 사용하여 생성할 수 있습니다.

 

 

DATA class_bar_anno;
SET class_bar_ods;
BY age sex;
LENGTH function $8
color $20
position when xsys ysys hsys $1
x y size 8
;
xsys = '2';
ysys = '2';
hsys = 'D';
when = 'A';
size = '8';
color = 'WHITE';
function = 'LABEL';
x = age;
y = total_count;
text = ccount;
position = '8';
OUTPUT;
RUN;
PROC GCHART DATA = class_bar ANNO = class_bar_anno;
PATTERN1 VALUE = SOLID COLOR = BLUE;
PATTERN2 VALUE = SOLID COLOR = RED;
VBAR age / SUBGROUP = sex TYPE = SUM SUMVAR = count DISCRETE;
RUN;

 

image (15).png

 

 

 

 

 

2. ODS Graphics

다음 예제는 VLINE 문을 사용하여 점 없이 일련의 점 레이블을 그림 아래와 같이 수직 막대 차트에 표시합니다. 단점은 라벨이 막대에 어디에 표시될지 알 수 없다는 것이다.

 

 

 

PROC SGPLOT DATA = class_bar_ods;
VBAR age / GROUP = sex GROUPORDER = ASCENDING RESPONSE = count STAT = SUM;
VLINE age / GROUP = sex GROUPORDER = ASCENDING RESPONSE = total_count_ods STAT = SUM
DATALABEL = ccount DATALABELPOS = DATA
DATALABELATTRS = (COLOR = WHITE WEIGHT = BOLD)
LINEATTRS = (THICKNESS = 0);
RUN;

 

 

 

 image (16).png

 

 

 

Version history
Last update:
‎02-27-2022 03:46 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags