BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
JacquesR
Quartz | Level 8

I want to create two heat maps from two datasets with similar structure.

The first dataset, however, does not have data for all x-y heat map combinations in the larger row x col panel structure, and this causes a problem in the heat map colour assignment.

Here is data and code:

data One;
input _Region $ 1-2 _Substance $ 7-20 _Scale $ 22-28 SW_Signif1 $ 31 N 36-40 Pct 42-47;
datalines;
AU    cricket        daily    A    304   0.0556
AU    cricket        daily    B    5168  0.9444
AU    cricket        monthly  A    11    0.0611
AU    cricket        monthly  B    169   0.9389
AU    cricket        yearly   A    1     0.0667
AU    cricket        yearly   B    14    0.9333
AU    facebook       daily    A    490   0.1046
AU    facebook       daily    B    4193  0.8954
AU    facebook       monthly  A    5     0.0321
AU    facebook       monthly  B    151   0.9679
AU    facebook       yearly   B    13    1
AU    superannuation daily    A    1709  0.3123
AU    superannuation daily    B    3763  0.6877
AU    superannuation monthly  A    5     0.0278
AU    superannuation monthly  B    175   0.9722
AU    superannuation yearly   B    15    1
AU    weather        daily    A    106   0.0194
AU    weather        daily    B    5366  0.9806
AU    weather        monthly  A    9     0.05
AU    weather        monthly  B    171   0.95
AU    weather        yearly   B    15    1
AU    youtube        daily    A    228   0.048
AU    youtube        daily    B    4518  0.952
AU    youtube        monthly  A    1     0.0064
AU    youtube        monthly  B    155   0.9936
AU    youtube        yearly   B    13    1
US    facebook       daily    A    307   0.0647
US    facebook       daily    B    4441  0.9353
US    facebook       monthly  A    6     0.0385
US    facebook       monthly  B    150   0.9615
US    facebook       yearly   B    13    1
US    youtube        daily    A    319   0.0672
US    youtube        daily    B    4429  0.9328
US    youtube        monthly  A    1     0.0064
US    youtube        monthly  B    155   0.9936
US    youtube        yearly   B    13    1
WW    clenbuterol    daily    A    18    0.0099
WW    clenbuterol    daily    B    1808  0.9901
WW    clenbuterol    monthly  A    3     0.0175
WW    clenbuterol    monthly  B    168   0.9825
WW    codeine        daily    A    16    0.0088
WW    codeine        daily    B    1810  0.9912
WW    codeine        monthly  A    6     0.0351
WW    codeine        monthly  B    165   0.9649
WW    facebook       daily    A    222   0.0468
WW    facebook       daily    B    4526  0.9532
WW    facebook       monthly  A    5     0.0321
WW    facebook       monthly  B    151   0.9679
WW    facebook       yearly   B    13    1
WW    fentanyl       daily    A    21    0.0115
WW    fentanyl       daily    B    1805  0.9885
WW    fentanyl       monthly  A    4     0.0234
WW    fentanyl       monthly  B    167   0.9766
WW    mdma           daily    A    238   0.1303
WW    mdma           daily    B    1588  0.8697
WW    mdma           monthly  A    3     0.0175
WW    mdma           monthly  B    168   0.9825
WW    modafinil      daily    A    118   0.0646
WW    modafinil      daily    B    1708  0.9354
WW    modafinil      monthly  A    1     0.0058
WW    modafinil      monthly  B    170   0.9942
WW    pregabalin     daily    A    240   0.1314
WW    pregabalin     daily    B    1586  0.8686
WW    pregabalin     monthly  A    11    0.0643
WW    pregabalin     monthly  B    160   0.9357
WW    youtube        daily    A    214   0.0451
WW    youtube        daily    B    4534  0.9549
WW    youtube        monthly  A    2     0.0128
WW    youtube        monthly  B    154   0.9872
WW    youtube        yearly   B    13    1
;
run;
data Two;
input _Region $ 1-2 _Substance $ 7-20 _Scale $ 22-28 SW_Signif1 $ 31 N 36-40 Pct 42-47;
datalines;
AU    clenbuterol    daily    A    203   0.8286
AU    clenbuterol    daily    B    42    0.1714
AU    clenbuterol    monthly  A    70    0.3933
AU    clenbuterol    monthly  B    108   0.6067
AU    codeine        daily    A    58    0.2367
AU    codeine        daily    B    187   0.7633
AU    codeine        monthly  A    56    0.3128
AU    codeine        monthly  B    123   0.6872
AU    cricket        daily    A    244   1
AU    cricket        monthly  A    172   0.9609
AU    cricket        monthly  B    7     0.0391
AU    facebook       daily    A    243   0.9918
AU    facebook       daily    B    2     0.0082
AU    facebook       monthly  A    138   0.9928
AU    facebook       monthly  B    1     0.0072
AU    fentanyl       daily    A    226   0.9224
AU    fentanyl       daily    B    19    0.0776
AU    fentanyl       monthly  A    67    0.3722
AU    fentanyl       monthly  B    113   0.6278
AU    mdma           daily    A    176   0.7184
AU    mdma           daily    B    69    0.2816
AU    mdma           monthly  A    41    0.2278
AU    mdma           monthly  B    139   0.7722
AU    modafinil      daily    A    71    0.2898
AU    modafinil      daily    B    174   0.7102
AU    modafinil      monthly  A    80    0.4444
AU    modafinil      monthly  B    100   0.5556
AU    pregabalin     daily    A    127   0.5184
AU    pregabalin     daily    B    118   0.4816
AU    pregabalin     monthly  A    77    0.4425
AU    pregabalin     monthly  B    97    0.5575
AU    superannuation daily    A    121   0.4939
AU    superannuation daily    B    124   0.5061
AU    superannuation monthly  A    84    0.4667
AU    superannuation monthly  B    96    0.5333
AU    youtube        daily    A    242   0.9918
AU    youtube        daily    B    2     0.0082
AU    youtube        monthly  A    152   0.9935
AU    youtube        monthly  B    1     0.0065
US    clenbuterol    daily    A    102   0.4163
US    clenbuterol    daily    B    143   0.5837
US    clenbuterol    monthly  A    129   0.7207
US    clenbuterol    monthly  B    50    0.2793
US    codeine        daily    A    161   0.6571
US    codeine        daily    B    84    0.3429
US    codeine        monthly  A    80    0.4444
US    codeine        monthly  B    100   0.5556
US    cricket        daily    A    230   0.9388
US    cricket        daily    B    15    0.0612
US    cricket        monthly  A    178   0.9944
US    cricket        monthly  B    1     0.0056
US    facebook       daily    A    245   1
US    facebook       monthly  A    139   0.9929
US    facebook       monthly  B    1     0.0071
US    fentanyl       daily    A    244   1
US    fentanyl       monthly  A    157   0.8722
US    fentanyl       monthly  B    23    0.1278
US    mdma           daily    A    210   0.8607
US    mdma           daily    B    34    0.1393
US    mdma           monthly  A    55    0.3073
US    mdma           monthly  B    124   0.6927
US    modafinil      daily    A    82    0.3347
US    modafinil      daily    B    163   0.6653
US    modafinil      monthly  A    70    0.3911
US    modafinil      monthly  B    109   0.6089
US    pregabalin     daily    A    42    0.1714
US    pregabalin     daily    B    203   0.8286
US    pregabalin     monthly  A    11    0.0611
US    pregabalin     monthly  B    169   0.9389
US    superannuation daily    A    223   0.9139
US    superannuation daily    B    21    0.0861
US    superannuation monthly  A    50    0.2778
US    superannuation monthly  B    130   0.7222
US    youtube        daily    A    244   1
US    youtube        monthly  A    151   1
WW    clenbuterol    daily    A    65    0.2653
WW    clenbuterol    daily    B    180   0.7347
WW    clenbuterol    monthly  A    29    0.1611
WW    clenbuterol    monthly  B    151   0.8389
WW    codeine        daily    A    156   0.6367
WW    codeine        daily    B    89    0.3633
WW    codeine        monthly  A    137   0.7654
WW    codeine        monthly  B    42    0.2346
WW    cricket        daily    A    245   1
WW    cricket        monthly  A    179   1
WW    facebook       daily    A    245   1
WW    facebook       monthly  A    127   0.9769
WW    facebook       monthly  B    3     0.0231
WW    fentanyl       daily    A    244   1
WW    fentanyl       monthly  A    155   0.8611
WW    fentanyl       monthly  B    25    0.1389
WW    mdma           daily    A    183   0.7469
WW    mdma           daily    B    62    0.2531
WW    mdma           monthly  A    78    0.4333
WW    mdma           monthly  B    102   0.5667
WW    modafinil      daily    A    81    0.3306
WW    modafinil      daily    B    164   0.6694
WW    modafinil      monthly  A    91    0.5056
WW    modafinil      monthly  B    89    0.4944
WW    pregabalin     daily    A    193   0.7878
WW    pregabalin     daily    B    52    0.2122
WW    pregabalin     monthly  A    89    0.4944
WW    pregabalin     monthly  B    91    0.5056
WW    superannuation daily    A    98    0.4
WW    superannuation daily    B    147   0.6
WW    superannuation monthly  A    107   0.5944
WW    superannuation monthly  B    73    0.4056
WW    youtube        daily    A    245   1
WW    youtube        monthly  A    151   1
;
run;
%MACRO CommonCode(dset=);
proc print data=&dset.;run;
PROC SGPANEL
    NOAUTOLEGEND
    DATA=&dset.;
    PANELBY _Region _Scale /LAYOUT=LATTICE NOVARNAME ONEPANEL NOWALL NOBORDER;
    ROWAXIS DISPLAY=(NOLABEL) DISCRETEORDER=DATA;
    COLAXIS DISPLAY=(NOLABEL);
    HEATMAP X=SW_Signif1 Y=_Substance / FREQ=N COLORSTAT=PCT DISCRETEX DISCRETEY ;
    TEXT X=SW_Signif1 Y=_Substance TEXT=Pct;
    FORMAT Pct PERCENT8.2;
	TITLE "&dset.";
RUN;
%MEND CommonCode;
%CommonCode(dset=One);
%CommonCode(dset=Two);

OneOneTwoTwo

The issue is easily seen when looking at the red which is meant to get darker as values get closer to 100%

If one looks at heat map two, then each set of A/B columns for AU, US, and WW are correctly coloured within that set.

However, for heat map one, high values only appear in red when all three of the panel columns have values, and even then, only one high value from the three sets appears in red (e.g., the youtube or facebook values).

If I change it to sgplot with by _Region _scale; to generate separate plots for each combination used in the panel, the colours are assigned correctly (with the exception of those having 100% where it's blue, instead of red). So I suspect the problem is not in the heatmap statement, but in how the panel is interacting with it.

 

My question, though, is how do I get consistently all the values close to 100% displayed in red, despite the portions of the panel which have no data?

 

Any help would be appreciated.

1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User

You could try this statement. Since you already calcualted Pct .

 

    HEATMAP X=SW_Signif1 Y=_Substance / /* FREQ=N COLORSTAT=PCT */ COLORRESPONSE=pct DISCRETEX DISCRETEY ;

View solution in original post

2 REPLIES 2
Ksharp
Super User

You could try this statement. Since you already calcualted Pct .

 

    HEATMAP X=SW_Signif1 Y=_Substance / /* FREQ=N COLORSTAT=PCT */ COLORRESPONSE=pct DISCRETEX DISCRETEY ;
Ksharp
Super User

If you really care about scale problem, you could consider standardize PCT before plot it .

 

data one;
 set one;
 _pct=pct;
run;
data two;
 set two;
 _pct=pct;
run;
proc stdize data=one out=o;var _pct;run;
proc stdize data=two out=t;var _pct;run;


%MACRO CommonCode(dset=);
proc print data=&dset.;run;
PROC SGPANEL
    NOAUTOLEGEND
    DATA=&dset.;
    PANELBY _Region _Scale /LAYOUT=LATTICE NOVARNAME ONEPANEL NOWALL NOBORDER;
    ROWAXIS DISPLAY=(NOLABEL) DISCRETEORDER=DATA;
    COLAXIS DISPLAY=(NOLABEL);
    HEATMAP X=SW_Signif1 Y=_Substance / /* FREQ=N COLORSTAT=PCT */ COLORRESPONSE=_pct DISCRETEX DISCRETEY ;
    TEXT X=SW_Signif1 Y=_Substance TEXT=Pct /strip;
    FORMAT Pct PERCENT8.2;
	TITLE "&dset.";
RUN;
%MEND CommonCode;
%CommonCode(dset=O)
%CommonCode(dset=T)

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 2 replies
  • 434 views
  • 1 like
  • 2 in conversation