此问题与:prior question link
有关我有一个类似的JSON文件:
[
{
"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
},
我可以使用以下代码将每一行导入到具有'rxnorm_id和drug_name的SAS中:
>
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和药物名称值之间的'计划'嵌套中的所有值。有人建议使用SAS中的OUTPUT选项查看缺失的行。任何人都能很好地修复我的代码吗?
由于
答案 0 :(得分:1)
从9.4开始,在SAS中解析JSON的最佳方法是using PROC GROOVY。这就是我的建议。您也可以使用DS2执行此操作。如果您喜欢冒险,并且在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;
警告:一个聪明的人说,当你使用正则表达式解决问题时,现在你有两个问题:)。可能出错的事情包括:
'
代替"
进行字符串分隔符