3K Views
March 26, 24
スライド概要
[第9回大阪SAS勉強会] 三木 悠吾
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
転職したらRプログラマーだった件 プログラム実行編 2024-03-22 三木悠吾
三木 悠吾 (Yugo Miki) 所属:グラクソ・スミスクライン株式会社 有限会社三栄 ミハルラボ(仮) GSKで働いていることが多いです。他はたまに。 今回の発表はGSKとして発表しているわけではありません。 【職務経験】 ・研究系(NC-PK, IoT, Big Data, Sensing) ・開発系(NC-PK、DM、PG、SYS) ・社内SEなど 【最近考えていること】 ・そうだ、特許を取ろう! ・嫁がデータサイエンティスト的な勉強を始めて驚いた
目的 • Rの臨床試験使用が確実に増えている • システムにRを組み込んでいる会社が発生し始めている • 一方で「Rいけます!」ってCROは少ない(あっても高い) • SASプログラマーがRプログラマー兼務してくれれば、業界的にも多少余裕 ができるのではないか →表題のテーマの逆引き辞書のようなもがあったらな、と思った次第
SAS vs R 統計ソフト SAS R 基本的なデータ単位 データセット。変数とオブザベー ションで構成される。 データセットと等価に近いものが データフレーム。純粋な行列。 データハンドリング 色々。データステップ、PDVによる データハンドリングが強烈。 色々。さまざまな拡張パッケージが 公開されており、様々なハンドリン グができる。 統計 標準的には実装されている。 R Baseには標準的なデータ型変換 STATやIMLなど拡張すれば多彩。 や数学系の関数の実装がほとんど。 ただし、課金が必要。 無料の拡張パッケージをインストー ルして統計機能を実装する。 エラーメッセージ 多彩。 あまり出ない。パッケージによるが、 データステップほど出力されない。 情報の探しやすさ Lex Jansenのような卓越した個人 が学会論文を集めてくれている。 情報は多いが、個人でどのパッ ケージを使うか、などの壁がある 価格 お高い。 無料
SASのプログラムの実行 標準的なもの • 開発中は対話型モードで実行 (F3、人が走っているマークのボタン) • 開発後は右クリックからバッチサブミット • 中身("C:¥Program Files¥SAS¥SAS 9.1¥sas.exe" -sysin c:¥saspgm¥batch.sas -log c:¥saslog -print c:¥sasout -nosplash -icon ) Ref: https://www.sas.com/offices/asiapacific/japan/service/technical/faq/list/body/pc068.html
Rの実行で困ること(RStudio) • ログ、そんなにでない? • 対話型は分かるけど、バッチ実行はどうすれば? • 適当に最新パッケージ、インストールしちゃった・・・ • ログファイルはどうやって出力すれば? • 全実行とかできるの?
Rの実行 • 対話型は分かるけど、バッチ実行はどうすれば? →R自体バッチ実行はできる →できない人は環境変数の設定ができていない (Windows のcommandにR系のcommandを追加するような作業) Note: SASの場合は手順内に「バッチ実行する」、ような記載がある場合があるが、何のためのバッチ実行 なのか把握した方が良い。Rの場合はそれでログが追加されるとかもない。SASの場合はログを出力す るため、だったりすることが多い。
環境変数の設定 • Windowsの設定の検索から「環 境変数」を検索し、「システム 環境変数の編集」を選択 • 「環境変数」をクリック • Pathを選択、編集をクリック • 「Rが置かれているフォルダ (Rstudioではない)」を追加す る。 私の場合は以下のフォルダ C:\Program Files\R\R-4.3.3\bin\x64
バッチ実行にこだわる必要ありますか? • SASは対話型、バッチ実行でいくつか仕様が異なる点がある (logファイル出力、デフォルト出力がlisting) • Rは別にメリットない(System屋にとっては便利だろうけど) Rを組織で使うとき ・是非ともSASのバッチサブミットのところも本来の要件(logが 出力されている、ERRORがない、など)に戻って手順をブラッ シュアップしてほしい。
SASで大量のプログラムを一括実行するには・・・ 1. Batchファイルに複数行書 いてしまう。Windows版 はこれでいける。 2. %includeで読み込む。バッ チ実行ではないが、小技 としてはかなり使える。 3. “*”でwildcard指定も可能。 example1 Start/w C:\SAS\SAS.exe –sysin C:\user\prog1.sas Start/w C:\SAS\SAS.exe –sysin C:\user\prog2.sas Start/w C:\SAS\SAS.exe –sysin C:\user\prog3.sas Example2 %include “C:\user\prog1.sas” “C:\user\prog2.sas” “C:\user\prog3.sas”; Example3 %include “C:\user\prog*.sas”;
フォルダ指定とかはどうなの? フォルダ内のファイルを取得することは可能 example 1. filenameでフォルダを指定(今回はSAS StudioのFreeのやつ、営利行為でない使用 です) filename dir “/home/yugomiki”; * 1; 2. Dopen関数でフォルダを開く。didには filename固有の値が格納される。 3. Dnum関数でファイルの数を取得してルー プ回数決める。 4. Dreadでファイル名取得。 5. Dcloseでファイルを閉じる。データセット を開いたら、閉じるまでがマナー! data file; length filename $20.; did = dopen("dir") ; * 2; do i = 1 to dnum(did) ; * 3; filename = dread(did, i) ; * 4; output ; end; rc = dclose( did ); * 5; drop rc; run;
楽しい大量実行 今回はSASデータセットでプログラムを保管し ているので、その後は%inclなどで実行する。 プログラム名にパターンを組み込むなど、拾いやす く加工しておけば効率よく作業できる。 Note: %inclで全体実行するときはods html close&ods listing がおすすめ。 とりわけダブルプログラミングの結果見る効率が極 めて良い。 example data _null_; set file; where filename contains “program”; call execute(cats(‘%incl “’,filename,’”;’)); run;
Rで大量のプログラムを一括実行するには・・・
1. List.filesでフォルダのプロ
グラムを取得
pattern は拡張子なども指
定できる
2. For loop でprogramsから個
別のprogramを取り出す。
3. Sourceで実行
Example
#1
programs <- list.files(path=“C:\user”, pattern =
“program”)
#2
for (program in programs)
{
#3
source(program)
}
> どこで止まったのかすらわからん・・・ 実行してもlogがぱっと出な い・・・ Example for (program in programs){ source(program) cat(“\n Run: ", program) } CAT関数で実行したものくら いは分かるようにする
Logrxの可能性 • https://www.jpma.or.jp/information/evaluation/results/allotment/g7 5una0000001axl-att/DS_202204_oss.pdf • オープンソースのところでも紹介されていました
Logについて • Defaultである程度出力される • Dataについてのログは、たま にデータ構造や変数について のミスに気づかせてくれる • カスタマイズは”ERR” “OR:” や”WAR” “NING:”などを出力す ることでなんとかできる。 • Defaultではerrorくらいであと はほぼ皆無 • Logを出力するLibraryをinstall することができる • 当然自分でもカスタムできる
適当にinstall packageしました・・・! Logrxでpackage一覧は出力可 能・・・! しかし、本当にそれだけで再現 性とれるのかどうかは要確認。 正直、VSCodeの一部のツールの ようなlibrary情報を外部設定に して毎回環境buildしてくれるよ うなツールがないと厳しい。 ないなら、コントロール環境で の使用がおすすめ。
最後に Rは無償ソフトウェアとしては極めて多様な機能そして拡 張性を持っています。 自由というのは便利そうに見えますが、その中で再現性、 正確性などを作りこむのはそれなりのスキルや知識が必要 です。当然、人も必要。 そういう意味ではSASはかなり楽なのかな。 現状のStandardはまだまだSASの時代が続くかも・・・
Reference • Run All Your SAS® Programs in One Program: Automatically, Paper 105-27, SUGI27