127 Views
April 02, 24
スライド概要
[第4回大阪sas勉強会] 三木悠吾
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
Java on SAS SAS上でJavaが書いてみた! 三木 悠吾 FMD K&L Japan
Introduction • O社でSAS LSAF導入が進行中 • LSAFはSASサーバー+データサーバー的な構成になっている • LSAFに対して外部からjavaコードで直接アクセスし,操作する方法がある (ふつうはログインして中でSASコード書けばいいんだけど・・・・) • というわけでjavaの練習ができる環境が欲しい! (家のPCにeclipseを入れればOKってのは無しで・・・)
Data Step Java Object • 見つけてしまった・・・・Data step java object • データステップからjavaのclassを呼び出せる
少し解説 クラスを定義。変数や処理を含 んだプログラムのひとかたまり /* Java code */ class MyClass { double compute(double x, double y, double z) { return (x + y + z); } メソッドcomputeを定義。 } Javaのクラスファイル、.java や.jarとして保存する。 dcl = declare。いつもの /* DATA step code */ componentを扱う構文。 data _null_; dcl javaobj j("MyClass"); rc = j.callDoubleMethod("compute", 1, 2, 3, r); put rc= r=; run; メソッド名、引数1~3、戻り値の変数名
環境設定がいるみたいです・・・ • Java環境変数の設定が必要(LSAF用ということで設定してもらえた) javaへのリンクのようなものだと思っておけばOK • クラスの設定方法・・・なんか書いてある・・・
設定はしてみたものの・・・ Q. SAS command lineってなんぞ? A. Batchモードで起動するときのオプ ションみたいなものらしい。 • SASへのショートカット開いてこんな感じでclasspath追加 • まあ、ここまで設定できた訳ですが、どうにも認識してくれない・・・ • やっぱりセキュリティきついから無理なのか・・・orz
Proc Groovy • SAS上でProc luaみたいな感じでjavaそっくりのgroovyという言語を動かせる • groovyもJava Virtual Machine(JVM)上で動く • 基本的にはjavaの構文と同じ • Javaのutilityなども使用可能 • JREなどはpinnacle等と共通(情報システム部等に報告いらず) • JDK必要なし (Eclipseの一部を使っている? よくみたらSASHomeの中にeclipseフォルダがある)
Proc GroovyとSAS • SAS上でjavaっぽいコードを実行できる • javaの基本構造であるclassを作成でき、保存できる • Data stepから保存したclassを呼び出し、実行することができる • ただ歴史はあるけど結局使われなかったので,Proc Luaとかに行った感がある • 確かにメタプログラム書くだけならluaで十分!
Groovyの基本構造 Filename cp “****\hello.java”;[1] proc groovy classpath=cp;[2] clear;[3] Submit;[4] Endsubmit;[5] Evaluate “println(“Hello World!!”)”;[6] Execute parseonly "&dir\hello.groovy";[7] Quit; [1]classが格納されているファイルを指定。 [2]classpathでファイルを指定。 [3]classpathを削除するオプション。 使用するまでclassspathは変更されない。 [4]ここから処理プログラムを書ける。 javaっぽくclassを作成してもいいし、 処理のみ書くこともできる(groovyの特徴) [5]ここまでgroovyの世界。 [6]直接groovyコードを実行。 [7]外部のgroovyファイルを実行。
実行してみる さっきのプログラムをgroovyで書いてみた エラー出た! でも結果あってる!? 拡張エディタは対応していない感じ・・・。
原因・・・ • Submit - endsubmit間のプログラムってコンパイル+実行されているっぽい • つまり (x + y + z)を引数なしで実行してるってこと • だからエラーになる(多分デフォルト処理入れたら大丈夫) • というよりclassの定義だけしたいんだけど・・・ • Load/parseonly/norun オプションがあるみたい
修正してみた Load/parseonly/norunがあるけど、 とりあえずparseonlyを選んでみた。 エラー消えた!!
その他も色々実験してみた • https://www.tutorialspoint.com/groovy/ • 上記のサイトのgroovyコードを試してみた • 画面作成など動かないものもあるけど、動くものも結構ある • XMLやJSONなど別形式のデータの読み込みなどはかなり強そう • ただし、小規模な関数的なプログラムをjavaやgroovyで作るなら、FCMPのほうが 処理速度も速いし適切である旨が書かれていた。
感想 • 結局java on SASってあまり効率よくないな、と実感 • 強力なんだけど無理にSASから実行しなくてもよいかなという感じ • JavaはJava、SASはSASで分けた方が勉強するにしても適切かな • ただjavaの自由度からすると,javaの中で究極のSQLみたいな感じでSASを使え るといい感じになるのかなと思う • それでもjavaの簡単な構文を練習するにはproc groovyで十分かなと思う。 • 本当にjava覚えるならeclipseなり、JDK含む環境作らないと意味はないかな。