【Python】【SAS】Pythonで学ぶSASの基本構文　~データ作成、データインポート・エクスポート~

## 目次
・目的
・本記事の説明の流れ
・2次元表データの作成
・データインポート/エクスポート
・最後に
・宣伝



## 目的
Pythonでデータ加工・分析はするがSASをあまり使ったことがない人向けに、SAS言語学習の導入として使ってもらうため、本記事を投稿しました。
Pythonは普段触っているがSASを触ったことがない人、もしくはSASを普段使っているがPythonも挑戦してみたいといった方に本記事はおすすめです。

## 本記事の説明の流れ
各章でのデータ加工手法の説明
→Pythonのコーディング方法
→SASのコーディング方法
..の流れで進めていきます。


## 2次元表データの作成

#### 2次元表データとは
2次元表データとは以下のような行と列で表現され、
それぞれの列に対してデータが格納されている形式です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/2036cee8-768f-3ee3-a357-5c81eb56f88c.png)



#### Pythonコーディング

```python:
import pandas as pd

data_shain = pd.DataFrame({
"shain" :["A","B","C","D","E"],
"busho":["営業","人事","営業","人事","経理"],
"todouhuken":["東京","愛知","静岡","千葉","岐阜"],
"yakushoku":["課長","課長","部長","課長","課長"]
})


```
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/76d5bba4-88e9-e787-af06-ae323ed6fc5c.png)


#### SASコーディング

```SAS:


data data_shain;
    input shain $2. busho $8. todouhuken $ yakushoku $ ;
    cards;
	A 営業 東京 課長
	B 人事 愛知 課長
	C 営業 静岡 部長
	D 人事 千葉 課長
	E 経理 岐阜 課長
	;
run;


/*datalinesでも代用可能*/
data data_shain;
    input shain $2. busho $8. todouhuken $ yakushoku $ ;
    datalines;
	A 営業 東京 課長
	B 人事 愛知 課長
	C 営業 静岡 部長
	D 人事 千葉 課長
	E 経理 岐阜 課長
	;
run;


```

結果...インポート成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/4f5dfbc3-79e3-1f74-cbba-d0d1997af3fa.png)


Pythonでは列ごとにデータを格納していましたが、SASではinputで列名の定義を行います。

以下SAS構文解説

input データの列名を定義する構文
$ :文字データの場合はドルマークを記入
2.などの数字：データの長さ(小数を定義する場合はピリオドの右側に数字を記入。指定は任意)
cards;やdatalines; :内部データを作成する際の構文



## データのインポート/エクスポート

#### データのインポート/エクスポートとは
インポートはファイルをpython・SASそれぞれで使えるデータに改変する作業です。
エクスポートはデータをファイル等に出力する作業です。
今回はcsvファイルとexcelファイルに絞って比較していきます。

#### Pythonコーディング

##### インポート
```python:
import pandas as pd

#csvファイルインポート
data_import_csv = pd.read_csv('ファイルのパス',header=None,name=['列名１','列名2'])
#ヘッダーがない場合はHeaderにNoneを指定
#任意の値を列名として設定するにはname=に列名を指定

#excelファイルインポート
data_import_excel = pd.read_excel('ファイルのパス',sheet_name="シートネーム名")

```
結果...インポート成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/81672d9b-a621-cebc-7760-a0e36afbf71a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/87541599-25fe-9e76-f8ca-d05ea5b716c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/fa084714-dc77-3946-80e9-07af2b0e0d19.png)

##### エクスポート
```python:
#csvインポート
import pandas as pd

data_import_csv.to_csv('ファイルパス')

#excelエクスポート
data_import_excel.to_excel('ファイルパス',sheet_name='シートネーム名')
```
結果...エクスポート成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/c6d5751a-075c-4c8f-131e-4506f0d26f9e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/be7cff4b-103f-6930-87cd-28b7f8d094ec.png)




#### SASコーディング
##### インポート
```SAS:
/*data ステップでcsvインポート*/
data  data_import_csv;
  infile "ファイルパス" dsd missover firstobs=2 encoding=sjis;
  input shain $ busho $ todouhuken $ yakushoku $;
run;

/*data ステップでexcelインポート*/
libname shain xlsx 'ファイルパス';
data data_import_excel;
	set shain.'シート名'n;
run;

/*proc importでcsvファイルインポート*/
proc import datafile="ファイルパス"
    dbms=csv
    out=data_import_csv
    replace;
run;

/*proc importでexcelファイルインポート*/
proc import datafile="ファイルパス"
    dbms=xlsx
    out=data_import_excel
    replace;
    sheet="シートネーム名";
run;

```
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/69905388-0fd6-315d-8d6c-2c1b7cfbf826.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/08ff9613-f806-40da-cd11-c15dc71f56b9.png)




##### エクスポート

```SAS:
/*data ステップでcsvエクスポート*/
data _null_;
	set data_import_excel;
	file "ファイルパス"  dsd;
	if _n_ = 1 then do;
		put
			"shain"	","
			"busho"	","
			"todouhuken" ","
			"yakushoku" 
		;
	end;
	put shain $ busho $ todouhuken $ yakushoku $;
run;


/*ods出力でexcelエクスポート*/
ods excel file="ファイルパス" options(sheet_name="シート名");
proc print data=data_import_excel;
run;
ods excel close;



/*proc exportでcsvエクスポート*/
proc export data=data_import_csv
    outfile="ファイルパス"
    dbms=csv
    replace;
run;


/*proc exportでexcelエクスポート*/
proc export data=data_import_excel
    outfile="ファイルパス"
    dbms=xlsx
    replace;
run;
```

結果...エクスポート成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/5c8f5837-4b3d-960b-af0c-57251274e6d0.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659205/8fa43f24-d6f5-d7b6-ab20-fd1d7aa645d9.png)


Python,SASの両方で同じようなインポート・エクスポート機能を有してます。
また、proc import/exportでEXCELやAccess等のPCファイル形式での利用は別途ライセンス(SAS/ACCESS to PC File Formats)が必要になります。

↓以下PCファイルライセンスについてのリンク
https://www.sas.com/offices/asiapacific/japan/service/technical/faq/list/body/access015.html

以下SAS構文解説
data=：出力するデータ名を記述する
set:出力元のデータを定義する構文
put：出力するシートの列名を定義する構文
ods excel:ods出力コマンド。ods excel closeでods出力を閉じる
file/datafile/outfile：ファイルのパス
dbms=：データの媒体を決定
replace：上書き機能



## 最後に

本記事ではデータの作成とデータインポート・エクスポートの手法を説明しました。
次回はデータ加工の手法をPython,SAS両方で説明していきます。
また、SASは本来有料ですが、無料で学習できるSAS OnDemand for Academicsがあるので、SASを始めてみたい方は当サイトをアクセスしてみてください

https://www.sas.com/ja_jp/software/on-demand-for-academics.html


## 宣伝

株式会社ジールはMicrosoft Azure やAWS（Amazon Web Services）、Google Cloud Platform（GCP）、Oracle Cloud Infrastructure（OCI）など、多彩なクラウドプラットフォーム構築・運用の知見を有しています。そのため、複数のクラウドサービスを組み合わせるマルチクラウド環境においても、ベンダーロックインを回避し、お客様のご要望に応じた最適なクラウドプラットフォームの構築・運用への対応が可能です。
https://www.zdh.co.jp/products-services/cloud-data/