R_tidyverse

SASユーザーがRを使ってみた(1)第一印象

普段はほとんどSASを使う私ですが、解析技術の向上のためRの勉強をしています。その一環として現在SASでやっている業務をRで実施した場合はどうなるのかを検証しています。
Rは昔触ったことがあるものの、Rstudioやtidyverseは全く知らない初心者なので、知識のアップデートをしていきたいです。

まだデータセットの作成を少し実施してみただけなのですが、SASとの違いの第一印象をまとめておこうと思います。

Rの使用環境

IDE: Rstudio

使用ライブラリ: tidyverse
readxl
gtsummary

所感

変数長を考慮しなくていい

最初に使って一番感じたメリットは変数長を考慮しなくていい点でしょう。

Rやpythonを触っている人からすると謎な仕様かと思いますが、SASでは変数(一般的にはカラムに相当)はあらかじめ変数長を定義しておく必要があり、一度定義すると変数長を変更できません。

変数長を事前に定義しなくてもプログラムは動作しますが、その場合変数長は最初に読み込んだデータの長さに設定されます。以降のデータに最初のよりも長い文字列がある場合は文字が切り捨てられます。

例えば変数長10の文字列型変数varを定義しておき、値を代入しようとしても10文字以上入力すると文字切れします。

data test; 
var="aaaaaaaaaa";output; 
*最初のデータよりも長いデータを入力すると文字が切り捨てられる; 
var="aaaaaaaaaabcdef";output; 
run;

変数長の単位はバイトとなります。日本語の場合は1文字2バイトなので、変数長10の場合は5文字しか格納できません。
さらにUTF-8の場合は1文字3バイトなのでもっと少なくなります。

そのためプログラム開発時はこの変数長を適切に設定する必要があります。固定長のテキストであれば問題ないですが、たいていの場合は可変長のテキストです。想定外の長い文字列が格納されていると文字切れを起こし解析の不備が発生することもありえます。

また文字エンコードの変更にも非常に弱いです。別の文字エンコードで開発を試みても設定を変更するだけではすみません。
エンコードによって必要な変数長が変わるため、基本的にはプログラムの修正が必須となります。

変数長はSAS独自の仕様なのでそのような概念のない別形式のデータをインポートするときも困ることがあります。SASでどうにかするよりも入力するデータのほうが簡単なことも多いです。
特にUTF-8のデータだと困るので、エンコードの変更を依頼したほうが楽かもしれません。

一方Rでは変数長という概念は存在しません。なのでこの問題は問題になることはありません。

私が使った印象だとRのほうが特殊文字などの入力に強い気がします。SASだと表示されないことがあるんですよね。

excelデータを読み込むことが多いのですが、変数長を気にする必要がないのでストレスは少ないです。excelのテーブルをすべて文字列型で読み込んだあと、適宜型変換するだけで問題なくできそうな印象を持ちました。

tidyverseすごい

tidyverseのおかげでデータハンドリングはもはやSASと同じくらいに簡潔に書けるようになっています。pandasよりも簡単にかけそう。

%>%でlinuxのパイプと同じような機能を使えるのはちょっと感動しました。

時系列データを操作するためのパッケージやグラフィックスもセットになってて、これが無料というのはほんとすごい時代になりましたね・・・

ドキュメントが充実している

情報量は圧倒的にRのほうが有利です。

tidyverseの公式サイトで関数や設定を簡潔にまとめたチートシートが配布されているし、日本語の情報も多いです。書籍もたくさんあるので教材には困らないはず。
それに対しSASはどうしてもデータステップに関するものが多く、グラフ作成やレポート作成のチュートリアルが少ない印象です。

書籍はせいぜい舟尾さんのものくらいでしょうし、お世辞に言っても充実しているとは呼べないと思います。

ログはSASのほうが親切

Rのログはエラーが出ない限りあまり情報を出力してくれません。SASの場合はデータセットの作成時に読み込んだオブザベーション数と作成したデータセットの情報、
処理にかかった時間などが出力されるため、かなり親切でした。これって当たり前じゃないんですね。

データセットの情報はRstudioにも表示されるので、そこで確認する感じのようです。
ログの内容を記録として保存する場合は、必要な情報を別途ログに出力するようにプログラムを作成する必要があります。