4 Commits

Author SHA1 Message Date
SASPAC - SAS Packages Archive
88092381eb Merge pull request #44 from SASPAC/dev
WUSS 2024 conference - materials on %RainCloudPlot() macro
2024-09-05 07:40:19 +02:00
Bart Jablonski
8778f39ce4 WUSS 2024 conference - materials on %RainCloudPlot() macro 2024-09-05 07:26:30 +02:00
SASPAC - SAS Packages Archive
dd158fc596 Merge pull request #43 from SASPAC/dev
The BasePlus package [ver. 2.0.1]
2024-07-24 08:14:52 +02:00
Bart Jablonski
8ceeeaadae The BasePlus package [ver. 2.0.1]
## The BasePlus package [ver. 2.0.1]

This release is dedicated to all dyslexics in the world.

### Changes:

New macros:
- [`%expandDataSetsList()`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#expanddatasetslist-macro) allowing to expand data set lists of the form: `a1-a3`, `b_:`, mixed, and `_all_`;
- [`%unifyVarsCaseSize()`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#unifyvarscasesize-macro) allowing to convert all variables in a list of datasets to all-low-case or all-upcase letters.

Both macros are result of recent discussions at `SAS-L` and `communities.sas.com`.

New format/informats:
- [`bpklength.`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#bpklength-format)
- [`bplength.`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#bplength-format)
- Bug fix in spelling (`lenght` vs `length`).

See [documentation](https://github.com/SASPAC/baseplus/blob/main/baseplus.md) for details.

---

SHA256 digest for BasePlus: `F*FB102C9B12E870666C15A651017D48E0141E47D64C11437350D0EC75A7E9E609`

---

### Example 1. New macros.

~~~~sas
data a1 a2 a3 b_x b_y b_z;
  set sashelp.class(obs=1);
run;

%put #%expandDataSetsList(lib=work,datasets=a1-a3 b_:)#;

proc print data=a1;
proc print data=b_x;
run;

%unifyVarsCaseSize(work,a1-a3 b_:)

proc print data=a1;
proc print data=b_x;
run;
~~~~

### Example 2. New formats/informats:

~~~~sas
data _null_;
  x = input('żółw', bpklength.);
  y = input('żółw', bplength.);
  put x= y=;
run;
~~~~

~~~~log
x=4 y=7
~~~~
2024-07-24 08:10:07 +02:00
16 changed files with 8625 additions and 19 deletions

View File

@@ -56,7 +56,7 @@ libname NEW "%workPath()/new";
``` ```
and more. and more.
SHA256 digest for the latest version of `BasePlus`: F*0730DD793516E5C193842126A7EC9D339ADADD19F0F40B071F938CABDE4E66AD SHA256 digest for the latest version of `BasePlus`: F*FB102C9B12E870666C15A651017D48E0141E47D64C11437350D0EC75A7E9E609
[**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus")

View File

@@ -9,22 +9,22 @@
### Version information: ### Version information:
- Package: BasePlus - Package: BasePlus
- Version: 2.0.0 - Version: 2.0.1
- Generated: 2024-07-23T21:51:33 - Generated: 2024-07-24T07:58:59
- Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com) - Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com)
- Maintainer(s): Bartosz Jablonski (yabwon@gmail.com) - Maintainer(s): Bartosz Jablonski (yabwon@gmail.com)
- License: MIT - License: MIT
- File SHA256: `F*0730DD793516E5C193842126A7EC9D339ADADD19F0F40B071F938CABDE4E66AD` for this version - File SHA256: `F*FB102C9B12E870666C15A651017D48E0141E47D64C11437350D0EC75A7E9E609` for this version
- Content SHA256: `C*0352F7BB04B99D620BEFD33FF1B1FF1835E6F8F21CC6A764D05EEE51E77E57E0` for this version - Content SHA256: `C*0444AC5B54150AE5424D335FF89A03D831F00F60898C99250CD59E0C5C5B0398` for this version
--- ---
# The `BasePlus` package, version: `2.0.0`; # The `BasePlus` package, version: `2.0.1`;
--- ---
# The BasePlus package [ver. 2.0.0] <a name="baseplus-package"></a> ############################################### # The BasePlus package [ver. 2.0.1] <a name="baseplus-package"></a> ###############################################
The **BasePlus** package implements useful The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS. functions and functionalities I miss in the BASE SAS.
@@ -4521,9 +4521,9 @@ semicolonN(X)
## `$bpklenght.` format/informat <a name="bpklenght-formats-49"></a> ###### ## `$bpklenght.` format/informat <a name="bpklenght-formats-49"></a> ######
## >>> `bpklenght` format/informat: <<< <a name="bpklenght-format"></a> ####################### ## >>> `bpklength` format/informat: <<< <a name="bpklength-format"></a> #######################
The **bpklenght** format and informats uses the `klength()` function The **bpklength** format and informats uses the `klength()` function
to count the number of letters in a word. For empty string returns 0. to count the number of letters in a word. For empty string returns 0.
@@ -4533,9 +4533,9 @@ to count the number of letters in a word. For empty string returns 0.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data work.count_letters; data work.count_letters;
input x $ 32.; input x $ 32.;
n = input (x, bpklenght.); n = input (x, bpklength.);
c = input (x, $bpklenght.); c = input (x, $bpklength.);
format x $bpklenght.; format x $bpklength.;
cards; cards;
ż ż
żó żó
@@ -4570,7 +4570,7 @@ data _null_;
length x $ 32767; length x $ 32767;
do i = 32767/3 to 0 by -1111, 10 to 0 by -1; do i = 32767/3 to 0 by -1111, 10 to 0 by -1;
x=repeat("空",i); x=repeat("空",i);
put x $bpklenght.; put x $bpklength.;
end; end;
run; run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -4582,9 +4582,9 @@ run;
## `$bplenght.` format/informat <a name="bplenght-formats-50"></a> ###### ## `$bplenght.` format/informat <a name="bplenght-formats-50"></a> ######
## >>> `bplenght` format/informat: <<< <a name="bplenght-format"></a> ####################### ## >>> `bplength` format/informat: <<< <a name="bplength-format"></a> #######################
The **bplenght** format and informats use the `lengthn()` function The **bplength** format and informats use the `lengthn()` function
to count the number of bytes in a word. to count the number of bytes in a word.
@@ -4594,9 +4594,9 @@ to count the number of bytes in a word.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data work.count_bytes; data work.count_bytes;
input x $ 32.; input x $ 32.;
n = input (x, bplenght.); n = input (x, bplength.);
c = input (x, $bplenght.); c = input (x, $bplength.);
format x $bplenght.; format x $bplength.;
cards; cards;
ż ż
żó żó
@@ -4631,7 +4631,7 @@ data _null_;
length x $ 32767; length x $ 32767;
do i = 32767/3 to 0 by -1111, 10 to 0 by -1; do i = 32767/3 to 0 by -1111, 10 to 0 by -1;
x=repeat("空",i); x=repeat("空",i);
put x $bplenght.; put x $bplength.;
end; end;
run; run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,698 @@
/* WUSS 2024 Paper 164 */
/* "Here Comes the Rain (Cloud Plot) Again" */
/* by Bartosz Jablonski */
/* Rain Cloud Plots - PART 1 - Article Plots */
/* SETUP *//*
----------------------------------------------------------------------
Only the first time:
^^^^^^^^^^^^^^^^^^^^
filename packages "/path/to/my/packages";
filename SPFinit url "https://bit.ly/SPFinit"; *(1);
%include SPFinit;
%installPackage(SPFinit BasePlus) *(2);
----------------------------------------------------------------------
On start of fresh SAS session:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
filename packages "/path/to/my/packages";
%include packages(SPFinit.sas);
%loadPackageS(BasePlus) *(3);
----------------------------------------------------------------------*/
/*footnotes**********************************************************
*(1); Bitly points to:
https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/SPFinit.sas
*(2); BasePlus is loaded for the %RainCloudPlot() macro.
*(3); RainCloudPlot can be just "cherry picked" from BasePlus:
%loadPackage(BasePlus, cherryPick=RainCloudPlot)
*********************************************************************/
/* basePlus, version 1.41.0 or later is required */
/* Help notes in log */
%helpPackage(basePlus, RainCloudPlot)
%let path=/path/for/plots/; /* adjust for your session */
resetline;
data have;
call streaminit(42);
do i = 1 to 3;
groupingVar = byte(64+i);
do j = 1 to rand("integer",17,42);
select(i);
when(1) analysisVar = rand("uniform", 1, 7);
when(2) analysisVar = rand("normal", -3, 2);
when(3) analysisVar = rand("exponential", 2);
otherwise;
end;
output;
end;
end;
drop i j;
run;
proc print;
run;
/* utility macros */
%macro beforePlot(N,orientation=landscape,papersize=A4);
ods printer close; ods pdf close;
options orientation=&orientation. nodate nonumber papersize=&papersize. center;
options topmargin=0cm leftmargin=0cm rightmargin=0cm bottommargin=0cm;
ods pdf file="&path.//WUSS2024paper164plot&n..pdf" contents=no notoc dpi=600;
ods printer file="&path.//WUSS2024paper164plot&n..svg" printer=svg dpi=600;
%mend beforePlot;
%macro afterPlot();
ods printer close;
ods pdf close;
%mend afterPlot;
/* 1 */
%beforePlot(1);
%rainCloudPlot(
have
, groupingVar
, analysisVar
)
%afterPlot()
/* 2 */
%beforePlot(2)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, TITLE = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";
)
, FOOTNOTE =
%str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
)
%afterPlot()
/* 3 */
%beforePlot(3)
data colors;
input color :$20. @@;
retain y -0.5;
value=1;
x=1;
y+1;
cards;
BlueViolet RoyalBlue OliveDrab
Gold HotPink Crimson
MediumPurple CornflowerBlue YellowGreen
Goldenrod Orchid IndianRed
;
run;
proc sgplot data=colors noborder noautolegend nowall subpixel;
styleattrs
DATACOLORS = (
BlueViolet RoyalBlue OliveDrab
Gold HotPink Crimson
MediumPurple CornflowerBlue YellowGreen
Goldenrod Orchid IndianRed
)
;
vbarparm response=value category=value/
group=color
grouporder=data
nooutline
groupdisplay=stack
clusterwidth=1
baselineattrs=(thickness=0)
;
text X=x Y=y TEXT=color /
backlight=.5
position=right
discreteoffset=-0.42
textattrs=(family="Courier New" size=14 weight=bold)
;
xaxis display=none offsetmax=0 offsetmin=0;
yaxis display=none;
run;
%afterPlot()
/* 4 */
%beforePlot(4)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";
)
, footnote =
%str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, MONOCHROME=1
)
%afterPlot()
/* 5 */
%beforePlot(5)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, COLORSLIST = CornflowerBlue OliveDrab IndianRed
)
%afterPlot()
/* 6 */
%beforePlot(6)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, RAINDROPSIZE = 8px
, KERNEL_K = quadratic
, KERNEL_C = 0.99
, VSCALE = Percent
, VSCALEmax = 60
)
%afterPlot()
/* 7 */
%beforePlot(7)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud (without BOX) Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, BOXPLOT=0
)
%afterPlot()
/* 8 */
%beforePlot(8)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, BOXPLOT=1
, BOXPLOTFILL = 0.5
, BOXPLOTLINESIZE = 2px
, BOXPLOTSYMBOLSIZE = 12px 8px
)
%afterPlot()
resetline;
proc format;
value $ FormatForGroup
"A" = 'Uniform[1, 7]'
"B" = 'Normal(-4, 2)'
"C" = 'Exponential(2)'
other = "Unknown!"
;
picture myPercent
0-100 = "099.9%"
other = "Wrong value"
;
run;
proc datasets lib=work nolist;
modify have;
format groupingVar $FormatForGroup.;
run;
quit;
/* 9 */
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
%beforePlot(9)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, XLABELS = ("Analyzed variable")
, XLABELPOS = CENTER
, XLABELATTRS = &labelStyle.
, XAXISVALUEATTRS = &valuesStyle.
, XAXISTICKSTYLE = ACROSS
, XBOTHAXIS = 0
, XAXISVALUES=(-10 to 10 by 2)
, XAXISVALUESFORMAT=F5.2 /* instead w.d format use Fw.d !! */
, XAXISOTHER=grid gridattrs=(thickness=0)
minor minorgrid minorgridattrs=(color=cxefefef pattern=dot)
, CATLABELS = ("Grouping variable with formated values")
, CATLABELPOS = TOP
, CATLABELATTRS = &labelStyle.
, CATAXISVALUEATTRS = &valuesStyle.
, FORMATED = 1
, Y2AXIS = 1
, Y2AXISLEVELS = 5
, Y2AXISVALUEATTRS = &valuesStyle.
, Y2AXISFORMAT = myPercent.
, Y2AXISLINES = 1
)
%afterPlot()
/* 10 */
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
%beforePlot(10)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, xlabels = ("Analyzed variable")
, xlabelpos = CENTER
, xlabelattrs = &labelStyle.
, xaxisvalueattrs = &valuesStyle.
, xaxistickstyle = ACROSS
, xbothaxis = 0
, xaxisValues=(-8 to 8 by 2)
, xaxisValuesFormat=F5.2
, xaxisOther=GRID MINOR MINORGRID MINORGRIDATTRS=(color=CXeFeFeF pattern=dot) GRIDATTRS=(thickness=0)
, catlabels = ("Grouping variable with formated values")
, catlabelpos = TOP
, catlabelattrs = &labelStyle.
, cataxisvalueattrs = &valuesStyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesStyle.
, y2axisformat = myPercent.
, y2axislines = 1
, WIDTHPX = 1200
, HEIGHTPX = 300
, MINRANGE = -8
, MAXRANGE = 8
)
%afterPlot()
/* 11 */
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
%beforePlot(11)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, xlabels = ("Analyzed variable")
, xlabelpos = CENTER
, xlabelattrs = &labelStyle.
, xaxisvalueattrs = &valuesStyle.
, xaxistickstyle = ACROSS
, xbothaxis = 0
, xaxisValues=(-8 to 8 by 2)
, xaxisValuesFormat=F5.2
, xaxisOther=GRID MINOR MINORGRID MINORGRIDATTRS=(color=CXeFeFeF pattern=dot) GRIDATTRS=(thickness=0)
, catlabels = ("Grouping variable with formated values")
, catlabelpos = TOP
, catlabelattrs = &labelStyle.
, cataxisvalueattrs = &valuesStyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesStyle.
, y2axisformat = myPercent.
, y2axislines = 1
, widthpx = 1200
, heightpx = 300
, minrange = -8
, maxrange = 8
, ODSGRAPHICSOPTIONS = NOBORDER
, SGPLOTOPTIONS = NOAUTOLEGEND NOBORDER NOWALL PAD=0
)
%afterPlot()
/* 12 */
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
data WORK.IN_PROGRESS;
function="TEXT"; transparency=0.5;
textcolor="GOLD"; textweight="BOLD";
widthunit="PERCENT"; drawspace="GRAPHPERCENT";
width=500;
label="*) will be ready for WUSS 2024";
textsize=24; anchor="LEFT ";
x1=2; y1=3; rotate=0;
output;
label="Draft(*ESC*){sup '*'}";
textsize=128; anchor="CENTER";
x1=50; y1=50; rotate=30;
output;
run;
%beforePlot(12)
%rainCloudPlot(
have
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, xlabels = ("Analyzed variable")
, xlabelpos = CENTER
, xlabelattrs = &labelStyle.
, xaxisvalueattrs = &valuesStyle.
, xaxistickstyle = ACROSS
, xbothaxis = 0
, xaxisValues=(-8 to 8 by 2)
, xaxisValuesFormat=F5.2
, xaxisOther=GRID MINOR MINORGRID MINORGRIDATTRS=(color=CXeFeFeF pattern=dot) GRIDATTRS=(thickness=0)
, catlabels = ("Grouping variable with formated values")
, catlabelpos = TOP
, catlabelattrs = &labelStyle.
, cataxisvalueattrs = &valuesStyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesStyle.
, y2axisformat = myPercent.
, y2axislines = 1
, widthpx = 1200
, heightpx = 300
, minrange = -8
, maxrange = 8
, odsgraphicsoptions = noborder
, sgplotoptions = noautolegend noborder nowall pad=0
, SGANNO = WORK.IN_PROGRESS
)
%afterPlot()
/* 13 */
%beforePlot(13)
%rainCloudPlot(
have2
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot - vertical";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE2, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, xlabels = ("Analyzed variable")
, xlabelpos = CENTER
, xlabelattrs = &labelStyle.
, xaxisvalueattrs = &valuesStyle.
, xaxistickstyle = ACROSS
, xbothaxis = 0
, xaxisValues=(-8 to 8 by 2)
, xaxisValuesFormat=F5.2
, xaxisOther=GRID MINOR MINORGRID MINORGRIDATTRS=(color=CXeFeFeF pattern=dot) GRIDATTRS=(thickness=0)
, catlabels = ("Grouping variable (formatted)")
, catlabelpos = CENTER
, catlabelattrs = &labelStyle.
, cataxisvalueattrs = &valuesStyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesStyle.
, y2axisformat = myPercent.
, y2axislines = 1
, widthpx = 1200
, heightpx = 300
, minrange = .
, maxrange = .
, odsgraphicsoptions = noborder
, sgplotoptions = noautolegend noborder nowall pad=0
, sganno = work.in_progress
, MEANSHIFTLINE=1
, MEANSHIFTSTEP=0.1
, MEANSHIFTCOLORS=Blue Green Red
)
%afterPlot()
resetline;
/* 14 */
data have2;
set have;
groupingVar2 = ifc(0=mod(_N_,2),"Even","Odd");
analysisVar2 = rannor(42);
run;
%beforePlot(14)
%rainCloudPlot(
have2
, groupingVar groupingVar2
, analysisVar analysisVar2
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot &gi. &xj.";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE2, with 87 observations, four variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, xlabels = ("First analyzed variable", "Second analyzed variable")
, xlabelpos = CENTER
, xlabelattrs = &labelStyle.
, xaxisvalueattrs = &valuesStyle.
, xaxistickstyle = ACROSS
, xbothaxis = 0
/*, xaxisValues=(-8 to 8 by 2)*/
, xaxisValuesFormat=F5.2
, xaxisOther=GRID MINOR MINORGRID MINORGRIDATTRS=(color=CXeFeFeF pattern=dot) GRIDATTRS=(thickness=0)
, catlabels = ("Grouping variable one", "Grouping variable two")
, catlabelpos = TOP
, catlabelattrs = &labelStyle.
, cataxisvalueattrs = &valuesStyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesStyle.
, y2axisformat = myPercent.
, y2axislines = 1
, widthpx = 1200
, heightpx = 300
, minrange = .
, maxrange = .
, odsgraphicsoptions = noborder
, sgplotoptions = noautolegend noborder nowall pad=0
, sganno = work.in_progress
, meanShiftLine =1
)
%afterPlot()
/* 15 */
%beforePlot(15,orientation=PORTRAIT)
%rainCloudPlot(
have2
, groupingVar
, analysisVar
, title = %nrstr(title1 J=C HEIGHT=2 "The Rain Cloud Plot - vertical";
title2 J=C HEIGHT=1 "Plotting for groups: &list_g.";)
, footnote = %str(footnote1 J=R H=1 C=Gray
"Data set HAVE2, with 87 observations, two variables.";)
, colorslist = CornflowerBlue OliveDrab IndianRed
, raindropsize = 8px
, kernel_k = quadratic
, kernel_c = 0.99
, vscale = percent
, vscalemax = 60
, boxplot=1
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, xlabels = ("Analyzed variable")
, xlabelpos = CENTER
, xlabelattrs = &labelStyle.
, xaxisvalueattrs = &valuesStyle.
, xaxistickstyle = ACROSS
, xbothaxis = 0
, xaxisValues=(-8 to 8 by 2)
, xaxisValuesFormat=F5.2
, xaxisOther=GRID MINOR MINORGRID MINORGRIDATTRS=(color=CXeFeFeF pattern=dot) GRIDATTRS=(thickness=0)
, catlabels = ("Grouping variable (formatted)")
, catlabelpos = CENTER
, catlabelattrs = &labelStyle.
, cataxisvalueattrs = &valuesStyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesStyle.
, y2axisformat = myPercent.
, y2axislines = 1
, widthpx = 1200
, heightpx = 300
, minrange = .
, maxrange = .
, odsgraphicsoptions = noborder
, sgplotoptions = noautolegend noborder nowall pad=0
, sganno = work.in_progress
, meanShiftLine=1
, meanShiftStep=0.05
, VERTICAL = 1
)
%afterPlot()
/*
%helpPackage(basePlus, RainCloudPlot)
*/

View File

@@ -0,0 +1,299 @@
/* WUSS 2024 Paper 164 */
/* "Here Comes the Rain (Cloud Plot) Again" */
/* by Bartosz Jablonski */
/* Rain Cloud Plots - PART 2 - Presentation Plots */
/*
See:
Rain Cloud Plots - PART 1 - Article Plots (file: Paper_164-WUSS2024.sas)
for details about the setup.
*/
data have;
call streaminit(64);
vertical = 42;
do j = 1 to 42;
horizontal = rand("uniform", 24, 42);
output;
end;
drop i j;
run;
data have;
set have;
horizontal = horizontal - 13;
run;
proc print;
run;
/* 101 */
%beforePlot(101)
%rainCloudPlot(
have
, vertical
, horizontal
, TITLE = %str(
title1 H=2 J=C "Here Come The Rain Again";
title2 H=1 J=C "Bartosz Jablonski";
)
, FOOTNOTE =
, vscale = percent
, vscalemax = 42
, y2axislevels = 1
, BOXPLOT=1
, BOXPLOTFILL = 0.5
, RAINDROPSIZE = 8px
, COLORSLIST=CX222222
, BOXPLOTLINESIZE = 2pt
, MINRANGE = 0
, MAXRANGE = 42
, xaxistickstyle = ACROSS
, xbothaxis = 0
, xaxisValues=(0 to 42 by 42)
, xaxisValuesFormat=F3.0
, xaxisOther=MINOR
, widthpx = 1200
, heightpx = 800
)
%afterPlot()
%beforePlot(102)
%rainCloudPlot(sashelp.cars, origin, invoice)
%afterPlot()
%beforePlot(103)
%rainCloudPlot(sashelp.class, sex, height)
%afterPlot()
%beforePlot(104)
%rainCloudPlot(sashelp.cars(where=(origin in: ("E" "U"))), origin, invoice
, TITLE = %nrstr(title1 J=C HEIGHT=2 "Distribution of cars prices";
title2 J=C HEIGHT=1 COLOR=DarkGrey "Europe vs. US";
)
, FOOTNOTE = %str(footnote1 J=l H=1 C=Gray "1%) Data from SASHELP.CARS";) /*"*/
)
%afterPlot() /*"*/
%beforePlot(105)
%rainCloudPlot(sashelp.cars(where=(origin in: ("E" "U"))), origin, invoice
, title = %nrstr(title1 J=C HEIGHT=2 "Distribution of cars prices";
title2 J=C HEIGHT=1 COLOR=DarkGrey "Europe vs. US";
)
, footnote = %str(footnote1 J=l H=1 C=Gray "1%) Data from SASHELP.CARS";) /*"*/
, COLORSLIST = OrangeRed OliveDrab
, BOXPLOTFILL = 0.5
, BOXPLOTLINESIZE = 2px
, BOXPLOTSYMBOLSIZE = 12px 8px
)
%afterPlot()
%beforePlot(106)
%rainCloudPlot(sashelp.cars(where=(origin in: ("E" "U"))), origin, invoice
, title = %nrstr(title1 J=C HEIGHT=2 "Distribution of cars prices";
title2 J=C HEIGHT=1 COLOR=DarkGrey "Europe vs. US";
)
, footnote = %str(footnote1 J=l H=1 C=Gray "1%) Data from SASHELP.CARS";) /*"*/
, colorslist = OrangeRed OliveDrab
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, RAINDROPSIZE = 3px
, KERNEL_K = triangular
, KERNEL_C = 0.99
, VSCALE = Percent
, VSCALEmax = 75
)
%afterPlot()
%beforePlot(107)
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
%rainCloudPlot(sashelp.cars(where=(origin in: ("E" "U"))), origin, invoice
, title = %nrstr(title1 J=C HEIGHT=2 "Distribution of cars prices";
title2 J=C HEIGHT=1 COLOR=DarkGrey "Europe vs. US";
)
, footnote = %str(footnote1 J=l H=1 C=Gray "1%) Data from SASHELP.CARS";) /*"*/
, colorslist = OrangeRed OliveDrab
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, raindropsize = 3px
, kernel_k = triangular
, kernel_c = 0.99
, vscale = percent
, vscalemax = 75
, XLABELS = ("Analyzed variable")
, XLABELPOS = CENTER
, XLABELATTRS = &labelStyle.
, XAXISVALUEATTRS = &valuesStyle.
, XAXISTICKSTYLE = ACROSS
, XBOTHAXIS = 0
, XAXISVALUES=(1e4 to 18e4 by 1e4)
, XAXISVALUESFORMAT=dollar12.2
, XAXISOTHER=grid gridattrs=(thickness=0)
minor minorgrid minorgridattrs=(color=cxefefef pattern=dot)
, CATLABELS = ("Grouping variable")
, CATLABELPOS = TOP
, CATLABELATTRS = &labelStyle.
, CATAXISVALUEATTRS = &valuesStyle.
, FORMATED = 1
, Y2AXIS = 1
, Y2AXISLEVELS = 5
, Y2AXISVALUEATTRS = &valuesStyle.
, Y2AXISFORMAT = F5.2
, Y2AXISLINES = 1
, WIDTHPX = 1200
, HEIGHTPX = 350
)
%afterPlot()
data WORK.AT_WUSS;
function="TEXT"; transparency=0.3;
textcolor="CornflowerBlue"; textweight="BOLD";
widthunit="PERCENT"; drawspace="GRAPHPERCENT";
width=500;
label="WUSS(*ESC*){sup '*'}";
textsize=96; anchor="CENTER";
textfont="Courier New";
x1=75; y1=20; rotate=0;
output;
run;
%beforePlot(108)
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
%rainCloudPlot(sashelp.cars(where=(origin in: ("E" "U"))), origin, invoice
, title = %nrstr(title1 J=C HEIGHT=2 "Distribution of cars prices";
title2 J=C HEIGHT=1 COLOR=DarkGrey "Europe vs. US";
)
, footnote = %str(footnote1 J=l H=1 C=Gray "1%) Data from SASHELP.CARS";) /*"*/
, colorslist = OrangeRed OliveDrab
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, raindropsize = 3px
, kernel_k = triangular
, kernel_c = 0.99
, vscale = percent
, vscalemax = 75
, xlabels = ("Analyzed variable")
, xlabelpos = center
, xlabelattrs = &labelstyle.
, xaxisvalueattrs = &valuesstyle.
, xaxistickstyle = across
, xbothaxis = 0
, xaxisvalues=(1e4 to 18e4 by 1e4)
, xaxisvaluesformat=dollar12.2
, xaxisother=grid gridattrs=(thickness=0)
minor minorgrid minorgridattrs=(color=cxefefef pattern=dot)
, catlabels = ("Grouping variable")
, catlabelpos = top
, catlabelattrs = &labelstyle.
, cataxisvalueattrs = &valuesstyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesstyle.
, y2axisformat = f5.2
, y2axislines = 1
, widthpx = 1200
, heightpx = 350
, SGANNO = WORK.AT_WUSS
, MEANSHIFTLINE=1
, MEANSHIFTSTEP=0.01
, MEANSHIFTCOLORS=gold blue
)
%afterPlot()
data WORK.AT_WUSS2;
function="TEXT"; transparency=0.3;
textcolor="CornflowerBlue"; textweight="BOLD";
widthunit="PERCENT"; drawspace="GRAPHPERCENT";
width=500;
label="WUSS(*ESC*){sup '2'}";
textsize=96; anchor="CENTER";
textfont="Courier New";
x1=60; y1=70; rotate=0;
output;
run;
%beforePlot(109,orientation=PORTRAIT)
%let labelStyle = size=10 family="Courier New" color=MidnightBlue weight=bold;
%let valuesStyle = size=8 family="Courier New" style=italic;
%rainCloudPlot(sashelp.cars(where=(origin in: ("E" "U"))), origin, invoice
, title = %nrstr(title1 J=C HEIGHT=2 "Distribution of cars prices";
title2 J=C HEIGHT=1 COLOR=DarkGrey "Europe vs. US";
)
, footnote = %str(footnote1 J=l H=1 C=Gray "1%) Data from SASHELP.CARS";) /*"*/
, colorslist = OrangeRed OliveDrab
, boxplotfill = 0.5
, boxplotlinesize = 2px
, boxplotsymbolsize = 12px 8px
, raindropsize = 3px
, kernel_k = triangular
, kernel_c = 0.99
, vscale = percent
, vscalemax = 75
, xlabels = ("Analyzed variable")
, xlabelpos = top
, xlabelattrs = &labelstyle.
, xaxisvalueattrs = &valuesstyle.
, xaxistickstyle = across
, xbothaxis = 0
, xaxisvalues=(1e4 to 18e4 by 1e4)
, xaxisvaluesformat=dollar12.2
, xaxisother=grid gridattrs=(thickness=0)
minor minorgrid minorgridattrs=(color=cxefefef pattern=dot)
, catlabels = ("Grouping variable")
, catlabelpos = center
, catlabelattrs = &labelstyle.
, cataxisvalueattrs = &valuesstyle.
, formated = 1
, y2axis = 1
, y2axislevels = 5
, y2axisvalueattrs = &valuesstyle.
, y2axisformat = f5.2
, y2axislines = 1
, widthpx = 1200
, heightpx = 400
, sganno = WORK.AT_WUSS2
, meanshiftline=1
, meanshiftstep=0.01
, meanshiftcolors=gold blue
, VERTICAL = 1
, ODSGRAPHICSOPTIONS = NOBORDER
, SGPLOTOPTIONS = NOAUTOLEGEND NOBORDER NOWALL PAD=0
)
%afterPlot()

Binary file not shown.

7609
hist/2.0.1/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/2.0.1/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB