BookmarkSubscribeRSS Feed
slg16
Calcite | Level 5

Hi,

 

I'm looking for a sgplot hbar statement to generate a graph with 7 binary variables. Each variable needs to be shown with both outcomes having each a bar.

A similar graph to the one I have to generate is shown below.

I would appreciate your help

 

Untitled.jpg

5 REPLIES 5
acordes
Rhodochrosite | Level 12

Hi,

 

try this:

 

DATA HBAR;
ARRAY _X (*) X1-X7;
DO J=1 TO 100;
DO I=1 TO DIM(_X);
RANDOM=RAND("UNIFORM");
_X(I)=(RAND("UNIFORM") LT RANDOM);
END;
OBS+1;
OUTPUT;
END;
DROP I J RANDOM;

RUN;

PROC TRANSPOSE DATA=HBAR OUT=HBARL;
BY OBS;
VAR X:;
RUN;

PROC SGPLOT DATA=WORK.HBARL;
HBAR _NAME_ / GROUP=COL1  GROUPDISPLAY=CLUSTER COLORSTAT=SUM;
RUN;
slg16
Calcite | Level 5

Hi acordes,

 

I'm getting error messages when using this code.

I changes variables in different places and the most often shown error is the variable doesn't exist. However, in the work viewtable, the variable is in.

 

Could you maybe indicate where each variable goes, maybe there is my mistake.

 

my 7 variables on the y-axis are supposed to be IL_6_cat, sHER_2neu_cat, VEGF_A_cat, sVEGFR_1_cat, uPA_cat, PLGF_cat, Angiopoietin_cat.

 

on the x-axis I want to have age or gender.

 

Thank you for further clarification

slg16
Calcite | Level 5

Attached is the graph I got.

However, I need 2 bars per variable with the frequency of age on the x-axis, or the frequency of gender.

The 7 y-axis variables are binary with either 0 or 1.

 

I would appreciate your help.

 

Thank you

ballardw
Super User

@slg16 wrote:

Attached is the graph I got.

However, I need 2 bars per variable with the frequency of age on the x-axis, or the frequency of gender.

The 7 y-axis variables are binary with either 0 or 1.

 

I would appreciate your help.

 

Thank you


And your code looks like?

Did you use a GROUP= with your gender variable? And the Groupdisplay=cluster option?

slg16
Calcite | Level 5

@ ballardw

 

This is the code I used as recommended by an earlier comment.

 

ATA HBAR;
ARRAY Age (*) IL_6_cat sHER_2neu_cat VEGF_A_cat sVEGFR_1_cat uPA_cat PLGF_cat Angiopoietin_cat;
DO J=1 TO 27;
DO I=1 TO 45-75;
RANDOM=RAND("UNIFORM");
Age (I)=(RAND("UNIFORM") LT RANDOM);
END;
OBS+1;
OUTPUT;
END;
DROP I J RANDOM;
RUN;

PROC TRANSPOSE DATA=HBAR OUT=HBARL;
BY Obs;
VAR IL_6_cat sHER_2neu_cat VEGF_A_cat sVEGFR_1_cat uPA_cat PLGF_cat Angiopoietin_cat;
RUN;

PROC SGPLOT DATA=WORK.HBARL;
HBAR _NAME_ / Group=COL1 GROUPDISPLAY=CLUSTER COLORSTAT=SUM;
RUN;

 

However in the column COL1 I only receive . instead of a 1 or 0.

Where is my mistake?

I started of with the age variable instead of gender

 

Thank you

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!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 1142 views
  • 0 likes
  • 3 in conversation