Using SAS with SoS

Installation

A sas_kernel is needed to use SAS with Jupyter. Although a sas kernel is part of the SAS University Edition, it is difficult to use SAS with SoS in this way because the University Edition is executed inside a VM.

Because sas_kernel requires SAS 9.4 or higher and only works on Linux, you will need a Linux server with SAS installed, and a Jupyter server with sas_kernel, which can be on the same or differnt server as SAS. Please refer to sas_kernel documentation for details.

Note that sas_kernel can be used with SAS 9.3 but some features might not work correctly.

Data Exchange

A SAS dataset is roughly equivalent to Python's DataFrame (Pandas) and R's dataframe, and this is the only datatype that can be exchanged between SAS and other languages.

For example, if you have a Python DataFrame

In [1]:

You can use magic %get in SAS subkernel to get the dataframe as a SAS dataset

In [2]:
Out[2]:
SAS Output
The SAS System

Obs A B C
1 0.43531 -0.59014 -0.53482
2 0.52063 -0.07271 0.20335
3 -0.33676 -0.46688 0.67523
4 2.05154 0.49498 -0.09263
5 0.14540 1.42063 -1.53003
6 -0.85585 -1.43616 0.85540
7 1.69783 -1.10050 -0.20532
8 1.49746 0.56832 -1.29725

You can also %get variables from other subkernels using option --from

In [3]:
Loading required package: feather
Out[3]:
SAS Output
The SAS System

Obs mpg cyl disp hp drat wt qsec vs am gear carb
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

If you have a dataset in SAS

In [4]:
Out[4]:
SAS Output
The SAS System

Obs NAME SEX AGE HEIGHT WEIGHT
1 JOHN M 12 59 99.5
2 JAMES M 12 57 83.0
3 ALFRED M 14 69 112.5
4 ALICE F 13 56 84.0

You can analyze it in SAS

In [5]:
Out[5]:
SAS Output
The SAS System

The MEANS Procedure

Variable N Mean Std Dev Minimum Maximum
AGE
HEIGHT
WEIGHT
4
4
4
12.7500000
60.2500000
94.7500000
0.9574271
5.9651767
14.0386372
12.0000000
56.0000000
83.0000000
14.0000000
69.0000000
112.5000000

Or transfer the data to other subkernels for analysis

In [6]:
%preview CLASS
> CLASS:
NAMESEXAGEHEIGHTWEIGHT
0JOHN M 12 59 99.5
1JAMES M 12 57 83.0
2ALFREDM 14 69 112.5
3ALICE F 13 56 84.0
In [7]:
AGE
12.75
HEIGHT
60.25
WEIGHT
94.75

Session info

In [8]:

SoS

SoS Version
0.9.8.5
pandas
0.20.2
numpy
1.12.1

SAS

Kernel
sas
Language
SAS
For  Base  SAS  Software  ... 
   Custom  version  information:  9.3_M2 
   Image  version  information:  9.03.01M2P080112 
For  SAS/STAT  ... 
   Custom  version  information:  12.1 
   Image  version  information:  9.03.01M0P081512 
For  SAS/GRAPH  ... 
   Custom  version  information:  9.3_M2 
For  SAS/ETS  ... 
   Custom  version  information:  12.1 
   Image  version  information:  9.03.01M0P081512 
For  SAS/FSP  ... 
   Custom  version  information:  9.3_M1 
For  SAS/OR  ... 
   Custom  version  information:  12.2 
   Image  version  information:  9.03.01M0P120512 
For  SAS/AF  ... 
   Custom  version  information:  9.3 
   Image  version  information:  9.03.01M0P051111 
For  SAS/IML  ... 
   Custom  version  information:  12.1 
   Image  version  information:  9.03.01M0P081512 
For  SAS/QC  ... 
   Custom  version  information:  12.1 
   Image  version  information:  9.03.01M0P081512 
For  SAS/SHARE  ... 
   Custom  version  information:  9.3_M1 
For  SAS/LAB  ... 
   Custom  version  information:  9.3 
   Image  version  information:  9.03.01M0P081512 
For  SAS/ASSIST  ... 
   Custom  version  information:  9.3 
   Image  version  information:  9.03.01M0P051111 
For  SAS/CONNECT  ... 
   Custom  version  information:  9.3_M2 
For  SAS/EIS  ... 
   Custom  version  information:  9.3 
   Image  version  information:  9.03.01M0P051111 
For  SAS/ACCESS  Interface  to  Netezza  ... 
   Custom  version  information:  9.3 
   Image  version  information:  9.03.01M0P051111 
For  SAS  Integration  Technologies  ... 
   Custom  version  information:  9.3_M2 
For  SAS/Secure  168-bit  ... 
   Custom  version  information:  9.3 
   Image  version  information:  9.03.01M0P051111 
For  SAS/ACCESS  Interface  to  DB2  ... 
   Custom  version  information:  9.3_M2 
For  SAS/ACCESS  Interface  to  Oracle  ... 
   Custom  version  information:  9.3_M1 
For  SAS/ACCESS  Interface  to  Sybase  ... 
   Custom  version  information:  9.3_M1 
For  SAS/ACCESS  Interface  to  PC  Files  ... 
   Custom  version  information:  9.3_M2 
For  SAS/ACCESS  Interface  to  ODBC  ... 
   Custom  version  information:  9.3_M2 
For  SAS/ACCESS  Interface  to  INFORMIX  ... 
   Custom  version  information:  9.3_M1 
For  SAS/ACCESS  Interface  to  Teradata  ... 
   Custom  version  information:  9.3_M2 
For  SAS/ACCESS  Interface  to  Microsoft  SQL  Server  ... 
   Custom  version  information:  9.3_M2 
For  SAS/ACCESS  Interface  to  MySQL  ... 
   Custom  version  information:  9.3_M2 

R

Kernel
ir
Language
R
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server release 6.3 (Santiago)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] feather_0.3.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.8     assertthat_0.1  digest_0.6.10   crayon_1.3.2   
 [5] IRdisplay_0.4.4 repr_0.10       R6_2.2.0        jsonlite_1.1   
 [9] magrittr_1.5    evaluate_0.10   stringi_1.1.2   uuid_0.1-2     
[13] IRkernel_0.7.1  tools_3.3.2     stringr_1.1.0   hms_0.3        
[17] pbdZMQ_0.2-4    tibble_1.2