うずまき2017 powered by Jun-Systems

耳管開放症, SAS, 統計解析, 人工知能, プログラミングそれに思考

*

SAS上でRを走らせよう SAS/IML

   

最近SAS関連のpostばっかですね。このブログは病気と音楽業界談義がメインのはずなのに。
さて、ワークフロー上で一瞬だけRを使う用事ができたので、前から気になっていた「SAS上でR言語をサブミットする」件を試してみました。
 
SAS/IMLが使えることが前提です。
 

対応しているRのバージョン

SASで走らせるとはいえ、裏で本物のRのエンジンが走ってるっぽいです。
これ最初ハマったんですけど、SASのバージョンによって使えるRが違うんですね。
対応してないR使うとなかなか奇怪なエラーが出ます。ちょっと忘れてしまったので、思い出したらまた書きます。
 
対応しているバージョンに関してはこちらなどで確認するとよいと思います。
What versions of R are supported by SAS? – The DO Loop
 

下準備

SASはデフォルトではR言語は走らないようになっています。(そのはずです)
そこで、環境変数をいじって起動時オプションとしてR言語を受け付けるようにします。
(改造とかではなく、用意された設定を変更するというだけの話です)
 
最初にSASを立ち上げて

PROC OPTIONS option=RLANG;
run;

 
これを走らせることで、R言語を受け付けられるかどうかを確認できます。
ログに3種類ぐらいのうちどれかのメッセージが返ってきます。
・この契約では使う資格はねえよ
・使えるけど設定がちげえよ
・もう既に使える状態だよ
みたいな感じです。
 
設定が違うと言われたら一旦SASを落としてから、環境変数に-RLANGオプションを追加します。
(環境設定のファイルの場所に関しては、以前適当に書いた「SASを使いやすくカスタマイズしよう SAS環境変数,AUTOEXECなど」などをご覧ください)
 
んで環境変数に

-RLANG

を追加して保存すればOK
 
これでSASを立ち上げたら走るはずです。
 

実際にやってみる

準備が整ったらば早速SASで走らせてみます。
IMLを使います。初めてのIMLがこれっていうのもなかなかですが。そしてIML Studioでも同じように走ります。
 

PROC IML;
  submit/R;
    x = 2;
    y = 3;
    z = 10;
    ans = (x+y)*z;
    print(ans);
  endsubmit;
run;

 
まあこんな感じで走ります。いかにRを書き慣れていないかがサンプルコードを見てひと目で理解できますね。
 
基本的にはsubmit/R〜endsubmitまでがRで読まれるという単純明快、親切仕様です。
library(RMeCab)みたいな感じでライブラリの読み出しなども普通にできます。
 

議論

「で、結局SASでR走らせてなんのメリットがあんだよ?」という話になってきます。
メリットに関しては、ぼく個人としてはこの機能は「ワークフローの中で一瞬Rを使わなきゃいけないような場面」で真価を発揮すると思っています。
 
卒論でやったテキストマイニングを最近空いている時間でまたやっているんですが、形態素解析モジュールのMeCabを使いたいような時にはSASから直接呼び出したりはできないんですよね。すると、RMeCabを使ってRで間接的に呼び出すような形が現実的となります。
つまり、「SASでデータ整形→そのままRに渡す→Rで形態素解析→SASに戻す→分析再開」といったようなワークフローになるわけです。しかし、Rに渡すタイミングでファイルを移動させてR立ち上げてRのプログラムをサブミットして〜とやるのは作業も増えてあまりスマートではありません。
そこで今回の機能を使うと、このワークフローをSAS上でのたった一回のサブミットで全部走らせることができます。たぶんうまく設計すればかなり使いやすいような気がします。
 
まあMeCab使うならPythonでもよかったんですけどね。
 
 


 - SAS, SAS Programming , , ,

Comment

  1. […] 昨日のpostでSAS上でRを走らせたので、Rで作ったデータをそのままSASで分析継続できるようにします。簡単です。   とりあえずぼくが使いたいのはRMeCabなので、青空文庫から戸坂潤『イデオロギー概論』を引っ張ってきてローカルにテキストで保存してあります。本当はプログラム書けばこれ自体ウェブから直接落としてこれるんですけどね。   […]

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

SASでディレクトリ内の全フォルダを自動でライブラリに追加する
no image
SASのPROC HTTPでe-statのAPIを叩く(叩くだけ)
実用性重視のSASコマンド集
no image
SASを使いやすくカスタマイズしよう SAS環境変数,AUTOEXECなど
【忘備録】SASで巨大データセットから先頭100Obsを抽出
SASでランダムサンプリングしてグループ分けするマクロ
no image
2014年IT関連まとめ
SASでカテゴリカルな変数をダミー変数化するマクロ
no image
SASでHHI(ハフィンダール指数)を計算するマクロを作った
SASで変数リスト内の全変数に順番に同じ処理をかけていくマクロ