2016-04-06 8 views
1

işlemek için ÇIKIŞ işlevini kullanarak: Ben mümkün duyuyorumAyrıştırma JSON nesnesi - Bölüm 2 - Bu soru ile ilgilidir yuvalanmış değerlere

[ 
     { 
     "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 
      }, 

: Ben şöyle bir JSON dosyası var prior question link

rxnor arasında bulunan planlarını 'yuva 'ı tüm değerleri almak istiyorum,

> 
    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; 

Ama rxnorm_id ve bu kodu kullanarak drug_name' vardır SAS içine her satırını ithal etmek m ve ilaç ismi değerleri. Birisi, eksik satırları görmek için SAS'daki OUTPUT seçeneğini kullanmayı önerdi. Bunu yapmak için koduma herkes iyi bir düzeltme yaptı mı?

Teşekkür

9,4 itibariyle

cevap

1

, SAS içinde JSON ayrıştırmak için en iyi yolu using PROC GROOVY olduğunu. Tavsiye ettiğim budur. Bunu DS2 ile de yapabilirsiniz. Maceralıysanız ve 9.4m3'te PROC LUA'u da kullanabilirsiniz. SAS veri kümelerini kolayca değiştirmenize izin verdiğinden, bunu denediğim şey buydu.

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; 
: Eğer örnek basit yapısı güvenebilirsiniz eğer

, söyleniyor, o zaman alanları ve biçiminde çıkış bunları veri adımda normal ifadeler kullanarak istediği tek satırları seçebilir

Savunma emirleri: Bilge bir kişi, normal ifadeleri kullanarak bir problemi çözdüğünüzde artık iki probleminiz olduğunu söyledi :). ters gidebilir şeylerin yanı: ' kullanarak

  • hat
  • kırar yerine dizesi için "
  • uzunlukları
  • karışık türleri
+0

Ben kodunuzu dahil etmek nasıl emin değilim sınırlayıcılar benimki (yavaş olduğu için üzgünüm). SAS 9.4'e yükseltmek zorundayım (şu anda 9.3'te). 9.4'e yükseltme yaparsam, Groovy zaten yüklü mü yoksa veya paketi ayrı olarak eklemek zorunda mıyım? – samtana

+0

Yukarıdaki yanıt, PRX işlevlerine dayanarak, herhangi bir SAS 9'da çalışır. Aslında, sorgunuzdaki json dosyasına işaret eden 'FILENAME URL'si' ile denedim ve gayet hızlı ve çok hızlı çalıştı. PROC GROOVY biraz kurulum gerektirebilir. [Doc] (http://support.sas.com/documentation/cdl/en/proc/68954/HTML/default/viewer.htm#p1x8agymll9gten1ocziihptcjzj.htm) 'NOXCMD' seçeneğini kapatmayı söylüyor. Herhangi bir özel kurulum yapmadan 9.4 üretim kutuda çalışabilirim. – Leo

+0

Görüyorum, bu oldukça şık. Bunun yerine bu bağlantı ile çalışmasını sağlamak için bir değişiklik var: https://www.bcbstx.com/forms/tx/drugs_tx-1.JSON Bu sizin 'satır sonları' potansiyel sorununuza ulaşıp ulaşmadığından emin değilim. Sağladığınız kodu kullanmaya çalıştığımda bu hatayı alıyorum: HATA: SSL desteği yüklenemiyor. Her iki durumda da, bu noktada sizin yardımınıza minnettarım. – samtana