2016-04-06 3 views
1

を処理するために、出力機能を使用して:私はできる午前解析JSONオブジェクト - パート2 - この質問はに関連して、ネストされた値

[ 
     { 
     "rxnorm_id": "999999999", 
     "drug_name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
     "plans": [ 
      { 
      "plan_id_type": "xxxxxxxxxxxxx", 
      "plan_id": "999999999999999", 
      "drug_tier": "xxxxxxxxxxxxxxx", 
      "prior_authorization": false, 
      "step_therapy": false, 
      "quantity_limit": false 
      }, 

:私はのように見えるJSONファイルを持っているprior question link

rxnorの間にある制度の巣:「私はすべての値をピックアップする、

> 
    filename data url 'http://stg-oh-medicaid.molinahealthcare.com/JSON/Drugs_Molina_Healthcare.json'; 
    data formularies; 
    infile data lrecl = 32000 truncover scanover; 
    input @'"rxnorm_id": "' rxnorm_id $255. 
    @'"drug_name": "' drug_name $255. 
    @'"plan_id_type": "' plan_id_type $255. 
    @'"plan_id": "' plan_id $255. 
    @'"drug_tier": "' drug_tier $255. 
    @'"prior_authorization": ' prior_authorization $255. 
    @'"step_therapy": ' step_therapy $255. 
    @'"quantity_limit": ' quantity_limit $255.; 
    rxnorm_id = scan(rxnorm_id,1,'",'); 
    drug_name = scan(drug_name,1,'",'); 
    plan_id_type = scan(plan_id_type,1,'",'); 
    plan_id = scan(plan_id,1,'",'); 
    drug_tier = scan(drug_tier,1,'",'); 
    prior_authorization = scan(prior_authorization,1,'",'); 
    step_therapy = scan(step_therapy,1,'",'); 
    quantity_limit = scan(quantity_limit,1,'",'); 
    run; 

しかしrxnorm_idをして、このコードを使用してdrug_name 'を持つSASへのすべての行をインポートしますmおよび薬物名の値。誰かがSASのOUTPUTオプションを使用して欠落している行を表示するよう提案しました。誰でも私のコードにこれを行うための良い修正を得ましたか? 9.4のよう

おかげ

答えて

1

、SASでJSONをパースするための最良の方法はusing PROC GROOVYです。それが私の推薦です。​​で行うこともできます。あなたが冒険的で、9.4m3の場合は、PROC LUAも使用できます。 SASデータセットを簡単に操作できるので、これを試してみます。言われていること

、あなたはあなたの例のシンプルな構造に依存していることができれば、あなたはフィールドと、データ・ステップで正規表現を使用したかった形式で出力それらを持っている行だけ選択することができます。

data want; 
    infile 'c:/tmp/json_snippet.txt'; 
    length field $20 data $100; 
    keep field data; 
    retain re; 

    input; 
    if _n_ = 1 then do; 
     re = prxparse('/"(.*?)": "?(true|false|.*?(?="))/'); 
    end; 

    if prxmatch(re,_infile_); /* grep only matching lines */ 

    call prxposn(re,1,start,len); 
    field = substr(_infile_,start,len); 
    call prxposn(re,2,start,len); 
    data = substr(_infile_,start,len); 
run; 

警備員:賢明な人は、正規表現を使用して問題を解決すると、今は2つの問題があると言っています。

  • ラインは混合型
+0

私はあなたのコードを組み込む方法を確認していない

  • デリミタ文字列を'を使用して代わりに"
  • を破る:間違って行くことができるもののうち、鉱山に入る(遅くなってしまって申し訳ありません)。私はSAS 9.4にアップグレードしなければならないかもしれません(今は9.3)。もし私が9.4にアップグレードしたら、Groovyは既にインストールされているのでしょうか、それとも別にパッケージを追加する必要がありますか? – samtana

  • +0

    上記の答えは、PRXの機能に基づいており、SAS 9で動作します。実際には、あなたの質問のjsonファイルを指す 'FILENAME URL 'で試してみました。 PROC GROOVYは少しセットアップが必要な場合があります。 [doc](http://support.sas.com/documentation/cdl/en/proc/68954/HTML/default/viewer.htm#p1x8agymll9gten1ocziihptcjzj.htm)は、「NOXCMD」オプションを無効にするように指示しています。特別な設定をせずに9.4のプロダクションボックスで正常に動作させることができます。 – Leo

    +0

    私はそれがかなり気の利いていることがわかります。代わりに、このリンクで動作させるための変更はありますか:https://www.bcbstx.com/forms/tx/drugs_tx-1.JSONこれは潜在的な問題の「改行」になるかどうかはわかりません。あなたが指定したコードを使用しようとすると、このエラーが発生します。エラー:SSLサポートをロードできません。 いずれにしても、私はこの点へのあなたの助けに非常に感謝します。 – samtana

    関連する問題