1.9K Views
April 02, 24
スライド概要
[第4回大阪sas勉強会]淺井 友紀
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
sasでjsonデータ扱えるらしい 淺井
jsonとは • データセット格納形式,軽い – 誤解を恐れずに言うとxmlみたいなもの • こんなん [ { "TITLE": “hoge", "YEAR": 2005, "PAGE": 399 } ]
出力データ data SAS2018 ; length TITLE $100 ; TITLE = "SASによる時間依存性ROC曲線とC統計量" ; AWARD = "最優秀賞"; YEAR = 2018 ; output; TITLE = "SASViyaのCNNを活用したProcess Innovation" ; AWARD = "優秀賞"; YEAR = 2018 ; output; TITLE = "日本におけるSASグリッド・コンピューティング環境への移行事例" ; AWARD = "奨励賞"; YEAR = 2018 ; output; run ;
出力
出力はとっても簡単.josnプロシジャに出力先と対象のデー
タセット指定するだけ
proc json out = “hogehoge\test1.json" ;
export SAS2018 ;
run ;
{"SASJSONExport":"1.0","SASTableData+SAS2018":[{"TITLE":"S
ASによる時間依存性ROC曲線とC統計量","AWARD":"最優秀
賞","YEAR":2018},{"TITLE":"SASViyaのCNNを活用したProcess
Innovation","AWARD":"優秀賞","YEAR":2018},{"TITLE":"日本
におけるSASグリッド・コンピューティング環境への移行事例
","AWARD":"奨励賞","YEAR":2018}]}
出力 • 見やすいように加工するオプション proc json out = "hoge\test2.json" pretty ; export SAS2018 ; run ;
{ "SASJSONExport": "1.0 PRETTY", "SASTableData+SAS2018": [ { "TITLE": "SASによる時間依存性ROC曲線とC統計量", "AWARD": "最優秀賞", "YEAR": 2018 }, { "TITLE": "SASViyaのCNNを活用したProcess Innovation", "AWARD": "優秀賞", "YEAR": 2018 }, { "TITLE": "日本におけるSASグリッド・コンピューティング環境への移行事例", "AWARD": "奨励賞", "YEAR": 2018 } ] }
出力 • デフォルトではsasのデータセット名がタグに 出るが,それを変更したい proc json out = "hoge\test4.json" pretty ; export SAS2018 / tablename="hoge"; run ;
{ "SASJSONExport": "1.0 PRETTY", "SASTableData+hoge": [ { "TITLE": "SASによる時間依存性ROC曲線とC統計量", "AWARD": "最優秀賞", "YEAR": 2018 }, { "TITLE": "SASViyaのCNNを活用したProcess Innovation", "AWARD": "優秀賞", "YEAR": 2018 }, { "TITLE": "日本におけるSASグリッド・コンピューティング環境への移行事例", "AWARD": "奨励賞", "YEAR": 2018 } ] }
出力 • そもそも一番上の「 SASJSONExport 」とか要ら ないから消す proc json out = "hoge\test3.json" pretty ; export SAS2018 / nosastags ; run ;
[ { "TITLE": "SASによる時間依存性ROC曲線とC統計量", "AWARD": "最優秀賞", "YEAR": 2018 }, { "TITLE": "SASViyaのCNNを活用したProcess Innovation", "AWARD": "優秀賞", "YEAR": 2018 }, { "TITLE": "日本におけるSASグリッド・コンピューティング環境への移行事例", "AWARD": "奨励賞", "YEAR": 2018 } ]
読み込み • libaname ステートメントのjsonエンジンを利用 – ds2とかgroovyプロシジャを使って読み込むことも可能 だが,今回はそれは取り扱わない.と言うかやり方わ からない libname jout json “hoge.json” map=“hoge.map” automap=replace ; ※jsonに日本語が含まれているとエラーが出る? 「コードポイントの一部がトランスコードされていませ ん」とのエラーメッセージが返ってくる
読み込み • 出力すると,ALLDATAとROOTの2データセット が確認できる. – ALLDATA: – ROOT:
読み込み • ALLDATAは全ての情報を変数の値として保持 – ALLDATAはalldataオプションで名前変更可 – viyaならnoalldataオプションで出力しないことも可 • ROOTは定義情報を使って変数を定義 – rootは名前を変えるオプションはなさそう...
mapファイルが必要 • jsonデータを開けるにはmapファイルが必要. – 拡張子.mapで,jsonの定義などが格納されているも の. – libnameステートメントではmapファイルを自動生成で きる.(前項のプログラムのautomapオプション) – mapファイルが無い場合,libnameのmapオプションの 指定に従ってmapファイルを自動生成してくれる. • mapファイルの有無に関わらずmapオプションの 指定は必要
コードの一例 filename jout “hoge\test8.json” ; filename jm1 “hoge\jmap.map" ; libname in json fileref = jout map = jm1 automap=replace alldata=“def”; proc copy in = in out = work ; run ; libname in clear ;
• ここから実際にwebに転がっているjson読み 込んで加工して,などの実例をお見せする予 定でした. • スマブラが捗りすぎて間に合いませんでした – スマブラ楽しいよスマブラ • 正直すまんかったと思っている
おまけ • sas 9.4M6がリリースされたようですね. – 2018年11月.まだsas studioもM5なので触れない. – sas stat 15.1も合わせてリリース • 統計って難しいね...誰かどう変わったか教えて... • sgpieプロシジャが気になる.円グラフらしい. – sgplotのステートメントじゃないんかお前 • ds2でいくつか機能追加? – SCANの第三引数に対応,SYSGET,CMISSに対応
おまけ2 • 今回はjsonを読み込みましたが,xmlもlibnameから読み込めます. – その時も構文はほとんど同じ.指定するエンジン名が違うくらい. – define.xmlはいけそうですね. filename DEF “hoge\define.xml" ; filename MAP “hoge\def.map" ; libname DEF xmlv2 xmlprocess=permit automap=replace xmlmap=MAP ; proc copy in = DEF out = work ; run ;