diff --git a/documents/notebooks/.gitkeep b/documents/notebooks/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/documents/notebooks/cars.csv b/documents/notebooks/cars.csv
new file mode 100644
index 0000000000000000000000000000000000000000..34b3d46d117b536242806051d43130e558437b7c
--- /dev/null
+++ b/documents/notebooks/cars.csv
@@ -0,0 +1,51 @@
+"","speed","dist"
+"1",4,2
+"2",4,10
+"3",7,4
+"4",7,22
+"5",8,16
+"6",9,10
+"7",10,18
+"8",10,26
+"9",10,34
+"10",11,17
+"11",11,28
+"12",12,14
+"13",12,20
+"14",12,24
+"15",12,28
+"16",13,26
+"17",13,34
+"18",13,34
+"19",13,46
+"20",14,26
+"21",14,36
+"22",14,60
+"23",14,80
+"24",15,20
+"25",15,26
+"26",15,54
+"27",16,32
+"28",16,40
+"29",17,32
+"30",17,40
+"31",17,50
+"32",18,42
+"33",18,56
+"34",18,76
+"35",18,84
+"36",19,36
+"37",19,46
+"38",19,68
+"39",20,32
+"40",20,48
+"41",20,52
+"42",20,56
+"43",20,64
+"44",22,66
+"45",23,54
+"46",24,70
+"47",24,92
+"48",24,93
+"49",24,120
+"50",25,85
diff --git a/documents/notebooks/images/.gitkeep b/documents/notebooks/images/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/documents/notebooks/images/fig.png b/documents/notebooks/images/fig.png
new file mode 100644
index 0000000000000000000000000000000000000000..fac116db23216025eed0b51cc97b94a5c757e89c
Binary files /dev/null and b/documents/notebooks/images/fig.png differ
diff --git a/documents/notebooks/notebook_Jupyter_Python_R.ipynb b/documents/notebooks/notebook_Jupyter_Python_R.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..3e41364c9ac24a1950da3806fc6dc2097eff7413
--- /dev/null
+++ b/documents/notebooks/notebook_Jupyter_Python_R.ipynb
@@ -0,0 +1,399 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Notebook Python R\n",
+ "\n",
+ "## Import des données dans Python"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Unnamed: 0 | \n",
+ " speed | \n",
+ " dist | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 7 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 7 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 8 | \n",
+ " 16 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Unnamed: 0 speed dist\n",
+ "0 1 4 2\n",
+ "1 2 4 10\n",
+ "2 3 7 4\n",
+ "3 4 7 22\n",
+ "4 5 8 16"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "# data_url = \"https://forge.scilab.org/index.php/p/rdataset/source/file/master/csv/datasets/cars.csv\"\n",
+ "data_url = \"cars.csv\"\n",
+ "df_python = pd.read_csv(data_url)\n",
+ "df_python.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Supression de la première colonne"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " speed | \n",
+ " dist | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 7 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 7 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 8 | \n",
+ " 16 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " speed dist\n",
+ "0 4 2\n",
+ "1 4 10\n",
+ "2 7 4\n",
+ "3 7 22\n",
+ "4 8 16"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_python.drop(df_python.columns[[0]], axis=1, inplace=True)\n",
+ "df_python.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Summary avec Python"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " speed | \n",
+ " dist | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 50.000000 | \n",
+ " 50.000000 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 15.400000 | \n",
+ " 42.980000 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 5.287644 | \n",
+ " 25.769377 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 4.000000 | \n",
+ " 2.000000 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 12.000000 | \n",
+ " 26.000000 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 15.000000 | \n",
+ " 36.000000 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 19.000000 | \n",
+ " 56.000000 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 25.000000 | \n",
+ " 120.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " speed dist\n",
+ "count 50.000000 50.000000\n",
+ "mean 15.400000 42.980000\n",
+ "std 5.287644 25.769377\n",
+ "min 4.000000 2.000000\n",
+ "25% 12.000000 26.000000\n",
+ "50% 15.000000 36.000000\n",
+ "75% 19.000000 56.000000\n",
+ "max 25.000000 120.000000"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_python.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Summary avec R"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from rpy2.robjects import pandas2ri\n",
+ "pandas2ri.activate()\n",
+ "from rpy2.robjects.packages import importr"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " speed dist \n",
+ "\r\n",
+ " Min. : 4.0 Min. : 2.00 \n",
+ "\r\n",
+ " 1st Qu.:12.0 1st Qu.: 26.00 \n",
+ "\r\n",
+ " Median :15.0 Median : 36.00 \n",
+ "\r\n",
+ " Mean :15.4 Mean : 42.98 \n",
+ "\r\n",
+ " 3rd Qu.:19.0 3rd Qu.: 56.00 \n",
+ "\r\n",
+ " Max. :25.0 Max. :120.00 \n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "base = importr('base')\n",
+ "print(base.summary(df_python))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "\r\n",
+ " Numeric \n",
+ "\r\n",
+ " mean median var sd valid.n\n",
+ "\r\n",
+ "speed 15.40 15 27.96 5.29 50\n",
+ "\r\n",
+ "dist 42.98 36 664.06 25.77 50\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "prettyR = importr('prettyR')\n",
+ "print(prettyR.describe(df_python))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Liens utiles\n",
+ "\n",
+ "- http://rpy.sourceforge.net/rpy2/doc-2.4/html/introduction.html\n",
+ "- https://rpy2.readthedocs.io/en/version_2.8.x/"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/documents/notebooks/notebook_Jupyter_Python_SAS.ipynb b/documents/notebooks/notebook_Jupyter_Python_SAS.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..2d7cb6c2c980fc395e6a51cbe759eb39407804bb
--- /dev/null
+++ b/documents/notebooks/notebook_Jupyter_Python_SAS.ipynb
@@ -0,0 +1,1630 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Notebook Python SAS\n",
+ "\n",
+ "## Import des données dans Python"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Unnamed: 0 | \n",
+ " speed | \n",
+ " dist | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 7 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 7 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 8 | \n",
+ " 16 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Unnamed: 0 speed dist\n",
+ "0 1 4 2\n",
+ "1 2 4 10\n",
+ "2 3 7 4\n",
+ "3 4 7 22\n",
+ "4 5 8 16"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "# data_url = \"https://forge.scilab.org/index.php/p/rdataset/source/file/master/csv/datasets/cars.csv\"\n",
+ "data_url = \"cars.csv\"\n",
+ "df_python = pd.read_csv(data_url)\n",
+ "df_python.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Supression de la première colonne"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " speed | \n",
+ " dist | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 7 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 7 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 8 | \n",
+ " 16 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " speed dist\n",
+ "0 4 2\n",
+ "1 4 10\n",
+ "2 7 4\n",
+ "3 7 22\n",
+ "4 8 16"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_python.drop(df_python.columns[[0]], axis=1, inplace=True)\n",
+ "df_python.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Summary avec Python"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " count | \n",
+ " mean | \n",
+ " std | \n",
+ " min | \n",
+ " 25% | \n",
+ " 50% | \n",
+ " 75% | \n",
+ " max | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " speed | \n",
+ " 50.0 | \n",
+ " 15.40 | \n",
+ " 5.287644 | \n",
+ " 4.0 | \n",
+ " 12.0 | \n",
+ " 15.0 | \n",
+ " 19.0 | \n",
+ " 25.0 | \n",
+ "
\n",
+ " \n",
+ " dist | \n",
+ " 50.0 | \n",
+ " 42.98 | \n",
+ " 25.769377 | \n",
+ " 2.0 | \n",
+ " 26.0 | \n",
+ " 36.0 | \n",
+ " 56.0 | \n",
+ " 120.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " count mean std min 25% 50% 75% max\n",
+ "speed 50.0 15.40 5.287644 4.0 12.0 15.0 19.0 25.0\n",
+ "dist 50.0 42.98 25.769377 2.0 26.0 36.0 56.0 120.0"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_python.describe().transpose()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Summary avec SAS"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "SAS Connection established. Subprocess id is 4708\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Libref = WORK\n",
+ "Table = _df\n",
+ "Dsopts = {}\n",
+ "Results = Pandas"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import saspy\n",
+ "session_sas = saspy.SASsession(cfgname='winlocal')\n",
+ "df_sas = session_sas.df2sd(df_python)\n",
+ "df_sas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- La fonction `df2sd()` produit un objet Python, ici `df_sas`, qui contient une table SAS nommée `_df`.\n",
+ "- `SASPy` fournit des objets Python de haut niveau pour les principales procédures SAS.\n",
+ "- Toutes les fonctions SAS sont exécutables à l'aide de la commande magique `%%SAS`.\n",
+ "- On applique les fonctions Python sur l'objet `df_sas` et les fonctions SAS sur l'objet `_df`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Variable | \n",
+ " N | \n",
+ " NMiss | \n",
+ " Median | \n",
+ " Mean | \n",
+ " StdDev | \n",
+ " Min | \n",
+ " P25 | \n",
+ " P50 | \n",
+ " P75 | \n",
+ " Max | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " speed | \n",
+ " 50 | \n",
+ " 0 | \n",
+ " 15 | \n",
+ " 15.40 | \n",
+ " 5.287644 | \n",
+ " 4 | \n",
+ " 12 | \n",
+ " 15 | \n",
+ " 19 | \n",
+ " 25 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " dist | \n",
+ " 50 | \n",
+ " 0 | \n",
+ " 36 | \n",
+ " 42.98 | \n",
+ " 25.769377 | \n",
+ " 2 | \n",
+ " 26 | \n",
+ " 36 | \n",
+ " 56 | \n",
+ " 120 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Variable N NMiss Median Mean StdDev Min P25 P50 P75 Max\n",
+ "0 speed 50 0 15 15.40 5.287644 4 12 15 19 25\n",
+ "1 dist 50 0 36 42.98 25.769377 2 26 36 56 120"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_sas.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Sortie SAS\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Sortie SAS
\r\n",
+ "\r\n",
+ "La MEANS Procédure
\r\n",
+ "\r\n",
+ "Statistiques descriptives
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Variable | \r\n",
+ "N | \r\n",
+ "Moyenne | \r\n",
+ "Ecart-type | \r\n",
+ "Minimum | \r\n",
+ "Maximum | \r\n",
+ "
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ " speed \r\n",
+ " dist \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 50 \r\n",
+ " 50 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 15.40 \r\n",
+ " 42.98 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 5.29 \r\n",
+ " 25.77 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 4.00 \r\n",
+ " 2.00 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 25.00 \r\n",
+ " 120.00 \r\n",
+ " \r\n",
+ " | \r\n",
+ "
\r\n",
+ "\r\n",
+ "
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "%%SAS session_sas\n",
+ "ods title;\n",
+ "ods noproctitle;\n",
+ "proc means data=_df maxdec=2;\n",
+ "run;"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Liens utiles\n",
+ "\n",
+ "**Code SAS dans notebook Jupyter :**\n",
+ "\n",
+ "- https://blogs.sas.com/content/sasdummy/2016/04/24/how-to-run-sas-programs-in-jupyter-notebook/\n",
+ "- https://blogs.sas.com/content/sasdummy/2017/04/08/python-to-sas-saspy/\n",
+ "- https://sassoftware.github.io/saspy/\n",
+ "\n",
+ "**Export vers pdf :**\n",
+ "\n",
+ "- https://github.com/sassoftware/sas_kernel/issues/13\n",
+ "- https://stackoverflow.com/questions/43965823/convert-notebook-generated-html-snippet-to-latex-and-pdf\n",
+ "- https://github.com/jupyter/nbconvert/issues/474\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/documents/notebooks/notebook_Jupyter_R.ipynb b/documents/notebooks/notebook_Jupyter_R.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..59e33b6c4d39cf95d43c777c5c20286f5449ccec
--- /dev/null
+++ b/documents/notebooks/notebook_Jupyter_R.ipynb
@@ -0,0 +1,75 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Notebook R"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ " speed dist \n",
+ " Min. : 4.0 Min. : 2.00 \n",
+ " 1st Qu.:12.0 1st Qu.: 26.00 \n",
+ " Median :15.0 Median : 36.00 \n",
+ " Mean :15.4 Mean : 42.98 \n",
+ " 3rd Qu.:19.0 3rd Qu.: 56.00 \n",
+ " Max. :25.0 Max. :120.00 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "summary(cars)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\nGMU0FVKti2PVToxiWgqp4u2aaidGIW2FBJUSEgQICQKEBAFCggAhQYCQIEBIECAkCBASBAgJ\nAoQEAUKCACFBgJAgQEgQICQIEBIECAkChAQBQvoc0/cv4XZCeh/Rd9TiHkI6H1FI3EhI3wZU\nErcR0rcBhcRthPRtQCFxGyGdj6gjbiSk9xGt2nEPIX2OKSNuJyQIaCskzxpUqqWQXMdQraZC\nKjU8/FZDIdnroV5CggAhQUBDIblGol5NhWTVjlq1FJJ9JKrVVkhQqaIhvTyuuqPV+mWoIWAU\nBUPaL7ovy0GGgJEUDGnd9c/b06Pdpu/WQwwBIykYUt9tPx9vu36IIWAkBUP6tuL29/Jbd+7G\nIWAknpEgoOw10mZ3euQaiakpufy9PHvtttgPMgSMo+w+0vq0j9SvHu0jMS3ubIAAIUGAkCBA\nSBAgJAgQEgQICQKEBAGVhgSNueGrPB9OSq1Tq3Ve1U5sFvOq9YM81Du1WudV7cRmMa9aP8hD\nvVOrdV7VTmwW86r1gzzUO7Va51XtxGYxr1o/yEO9U6t1XtVObBbzqvWDPNQ7tVrnVe3EZjGv\nWj/IQ71Tq3Ve1U5sFvOq9YM81Du1WudV7cRmMa9aP8hDvVOrdV7VTmwW86r1gzzUO7Va51Xt\nxGYxr1o/yEO9U6t1XtVObBbzqvWDPNQ7tVrnVe3EZjGvWj9IaIqQIEBIECAkCBASBAgJAoQE\nAUKCACFBgJAgQEgQICQIEBIECAkChAQBQoKASkO6+XuZD+rpY0LrvuvX+1Hn8s3HxOo6bU+L\nz7NU1Qn7mlfwfNVy0r/b1vUV8W77MaHlaXKLcWdz5mNidZ229Wku/fErtqoT9jWv5Pmq5KT/\nYdutxp7C37b9+yl/6frt8XcvI0/ow+fEqjpt2+5hf3yufKjshJ3NK3m+6gzpqXscewp/eeqW\n71+v627z+utzLXP8mlhVp231Nqfj1Ko6YWfzSp6vWkN6GnsKf+nWh/ev11W3O1T0z//XxKo8\nbV11J+zkLaTc+aozpFW3eXi9IBx7Gt9sDx9fr9//M7qviVV42vbdsroTdnSaV/J8VfSxnVm9\nXQQux57HH+oM6XAWUnWn7en4qq6+E/Y2r+T5quhjO9N1z6//aKxre6VSe0j1nbZdf3w5V98J\n+5hX7nzV87H9bV/LgumH2kN6U9Fp2/enf+2rO2Hv83r/TeR8VfOx/Us9Z/7N+3z62r4u/phK\nPRNbvn2JVnfClt/Sicyrmo/tX+o582++rdrtKlqEqjOk3WK5Oz2o7IR9zuvdhEPqu+N+eDVn\n/sP7GX88bYtsunqWxz6fKms6bZvPq/i6TtjXvJLnq86Q1sdzvn/bx6tIpXc2fE6sqtO2+1oN\nq+qEnc0reb7qDGnfn9Yl6/gX7MvHa4BFbavM7xOr6rQ9dF93stV0ws7mlTxfdYb0+s9E3y3q\nWcV99xHS/nQz87hz+eZ8YrWctu4spJpO2J/zCp2vSkOCtggJAoQEAUKCACFBgJAgQEgQICQI\nEBIECAkChAQBQoIAIUGAkCBASBAgJAgQEgQICQKEBAFCggAhQYCQIEBIECAkCBASBAgJAoQE\nAUKCACFBgJAgQEgQICQIEBIECGl6avmp5rPinE+PkEbgnE+PkEbgnE+PkEbgnFdvs+y65eZw\nCmT9+cPBnxZd//TXw3XfrYU0Bue8dk9vP8z+6RjS4/HR8vh/V92/Hi6Pj1ZCGoFzXru+2x4O\nz93iGFK/PWz77vn1Wapb7g/7Zbf59vD5/Q/4pJbnnNeuOyZy9mjTrY7PQvvXh/u/Hr6c/oBP\nannOee3Wry/Wttvjo/dAjv/pPvzx8HD25yjJOa/e4+trta7fCalqznkDNuvF2zXS6XdnyXz8\n9vtDIY3AOW/DWz1vl0APx6uhjwunvx++CGkEznntFsdVum+rdh/rc4en4wrD2cONVbvROOe1\ne367Ano5hvS2T3T8v6dHpyun84enLaUHIY3AOa/e6c6G44u610BW3eLrdobuYffnw0d3NozE\nOW+HQCrmc9MOIVXM56YdQqqYz007hFQxnxsIEBIECAkChAQBQoIAIUGAkCBASBAgJAgQEgQI\nCQKEBAFCggAhQYCQIEBIECAkCBASBAgJAoQEAUKCACFBgJAgQEgQICQIEBIECAkC/gNzeDUu\n0A6vdAAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "plot without title"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(cars)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "R",
+ "language": "R",
+ "name": "ir"
+ },
+ "language_info": {
+ "codemirror_mode": "r",
+ "file_extension": ".r",
+ "mimetype": "text/x-r-source",
+ "name": "R",
+ "pygments_lexer": "r",
+ "version": "3.5.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/documents/notebooks/notebook_Jupyter_SAS.ipynb b/documents/notebooks/notebook_Jupyter_SAS.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..e40b45c0488fe53afbc3af3444ba2e9401280ef6
--- /dev/null
+++ b/documents/notebooks/notebook_Jupyter_SAS.ipynb
@@ -0,0 +1,2453 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Notebook SAS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Les notebooks SAS reposent sur l'ods. On peut donc utiliser les fonctionnalités de l'ods."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "SAS Connection established. Subprocess id is 4596\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Sortie SAS\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Sortie SAS
\r\n",
+ "\r\n",
+ "La MEANS Procédure
\r\n",
+ "\r\n",
+ "Statistiques descriptives
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Variable | \r\n",
+ "N | \r\n",
+ "Moyenne | \r\n",
+ "Ecart-type | \r\n",
+ "Minimum | \r\n",
+ "Maximum | \r\n",
+ "
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ " Age \r\n",
+ " Height \r\n",
+ " Weight \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 19 \r\n",
+ " 19 \r\n",
+ " 19 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 13.3157895 \r\n",
+ " 62.3368421 \r\n",
+ " 100.0263158 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 1.4926722 \r\n",
+ " 5.1270752 \r\n",
+ " 22.7739335 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 11.0000000 \r\n",
+ " 51.3000000 \r\n",
+ " 50.5000000 \r\n",
+ " \r\n",
+ " | \r\n",
+ "\r\n",
+ "\r\n",
+ " 16.0000000 \r\n",
+ " 72.0000000 \r\n",
+ " 150.0000000 \r\n",
+ " \r\n",
+ " | \r\n",
+ "
\r\n",
+ "\r\n",
+ "
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ods title;\n",
+ "ods noproctitle;\n",
+ "proc means data=sashelp.class;\n",
+ "run;"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Sortie SAS\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "Sortie SAS
\r\n",
+ "\r\n",
+ "La SGPLOT Procédure
\r\n",
+ "\r\n",
+ "The SGPlot Procedure
\r\n",
+ "\r\n",
+ "

\r\n",
+ "
\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "title 'Student Weight by Student Height';\n",
+ "proc sgplot data=sashelp.class noautolegend;\n",
+ " pbspline y=weight x=height;\n",
+ "run;"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "En cas d'erreur, la log s'affiche dans le notebook :"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\f",
+ "8 Le Système SAS 23:47 Monday, September 17, 2018
61 ods listing close;ods html5 (id=saspy_internal) file=_tomods1 options(bitmap_mode='inline') device=svg style=HTMLBlue;
61 ! ods graphics on / outputfmt=png;
NOTE: Writing HTML5(SASPY_INTERNAL) Body file: _TOMODS1
62
63 proc means data sashelp.class;
_____________
73
ERROR 73-322: Expecting an =.
64 run;
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE MEANS used (Total process time):
real time 0.00 secondes
cpu time 0.00 secondes
65
66 ods html5 (id=saspy_internal) close;ods listing;
67
\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "proc means data sashelp.class;\n",
+ "run;"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "SAS",
+ "language": "sas",
+ "name": "sas"
+ },
+ "language_info": {
+ "codemirror_mode": "sas",
+ "file_extension": ".sas",
+ "mimetype": "text/x-sas",
+ "name": "sas"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/documents/notebooks/notebook_Jupyter_html.ipynb b/documents/notebooks/notebook_Jupyter_html.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a615ff82040c06ad8fdd8b516db98c1a17412174
--- /dev/null
+++ b/documents/notebooks/notebook_Jupyter_html.ipynb
@@ -0,0 +1,58 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Hello
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from IPython.display import display, HTML\n",
+ "display(HTML('Hello
'))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Liens utiles :\n",
+ "\n",
+ "- https://stackoverflow.com/questions/43965823/convert-notebook-generated-html-snippet-to-latex-and-pdf\n",
+ "- https://github.com/jupyter/nbconvert/issues/474"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/documents/notebooks/notebook_Jupyter_html.pdf b/documents/notebooks/notebook_Jupyter_html.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0014c3b9ea8b6f1c746d971c155455b881359540
Binary files /dev/null and b/documents/notebooks/notebook_Jupyter_html.pdf differ
diff --git a/documents/notebooks/notebook_RStudio_Rmarkdown.pdf b/documents/notebooks/notebook_RStudio_Rmarkdown.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..63bcfc9c3bdc77ec2298bbf896ecd703c1d4abf1
Binary files /dev/null and b/documents/notebooks/notebook_RStudio_Rmarkdown.pdf differ
diff --git a/documents/notebooks/notebook_RStudio_SASmarkdown.md b/documents/notebooks/notebook_RStudio_SASmarkdown.md
new file mode 100644
index 0000000000000000000000000000000000000000..8794cf847dc583dc9ec724857ec6835bfebcc679
--- /dev/null
+++ b/documents/notebooks/notebook_RStudio_SASmarkdown.md
@@ -0,0 +1,91 @@
+SASmarkdown notebook
+====================
+
+Reference manual
+================
+
+[SASmarkdown.pdf](https://cran.r-project.org/web/packages/SASmarkdown/SASmarkdown.pdf)
+
+Configuration
+=============
+
+ ```{r setup, include=FALSE}
+ knitr::opts_chunk$set(echo = TRUE)
+ require(SASmarkdown)
+ saspath <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe"
+ sasopts <- "-nosplash -ls 75"
+ knitr::opts_chunk$set(engine='sas', engine.path=saspath,
+ engine.opts=sasopts, comment="")
+ ```
+
+Listing output
+==============
+
+ ```{r, engine='sas', collectcode=TRUE, error=FALSE}
+ proc means data=sashelp.class;
+ run;
+
+ ods listing gpath='D:\figures';
+ ods graphics / imagename="fig" imagefmt=png;
+ title 'Student Weight by Student Height';
+ proc sgplot data=sashelp.class noautolegend;
+ pbspline y=weight x=height;
+ run;
+ ```
+
+ Procédure MEANS
+
+ Variable N Moyenne Ecart-type Minimum Maximum
+ -------------------------------------------------------------------------
+ Age 19 13.3157895 1.4926722 11.0000000 16.0000000
+ Height 19 62.3368421 5.1270752 51.3000000 72.0000000
+ Weight 19 100.0263158 22.7739335 50.5000000 150.0000000
+ -------------------------------------------------------------------------
+
+``
+
+
+
+HTML output (vue du fichier pdf)
+===========
+
+ ```{r, engine='sashtml', collectcode=TRUE, error=FALSE}
+ proc means data=sashelp.class;
+ run;
+ ```
+
+Tableau mal converti en pdf
+
+ Variable
+ N
+ Moyenne
+ Ecart-type
+ Minimum
+ Maximum
+ Age
+ Height
+ Weight
+ 19
+ 19
+ 19
+ 13.3157895
+ 62.3368421
+ 100.0263158
+ 1.4926722
+ 5.1270752
+ 22.7739335
+ 11.0000000
+ 51.3000000
+ 50.5000000
+ 16.0000000
+ 72.0000000
+ 150.0000000
+
+ ```{r, engine='sashtml', echo=FALSE, collectcode=TRUE, error=FALSE}
+ title 'Student Weight by Student Height';
+ proc sgplot data=sashelp.class noautolegend;
+ pbspline y=weight x=height;
+ run;
+ ```
+
+Pas de sortie graphique dans le fichier pdf.
\ No newline at end of file
diff --git a/documents/notebooks/notebook_RStudio_SASmarkdown.pdf b/documents/notebooks/notebook_RStudio_SASmarkdown.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..f8203f5a13630064acf8e9f48199dc881642332f
Binary files /dev/null and b/documents/notebooks/notebook_RStudio_SASmarkdown.pdf differ