SAS:捕获文本文件中的特定字段

SAS:捕获文本文件中的特定字段,sas,Sas,我正在编写一个SAS程序来与API交互。我试图使用SAS从API生成的文本文件中捕获特定字段 生成的文本“resp”如下所示: {“结果”:{“progressId”:“ab12”,“完成百分比”:0.0,“状态”:“inProgress”},“meta”:{“requestId”:“abcde123”,“httpStatus”:“200-OK”} 我要捕获的字段是“progressID”。在这种情况下,它将是“ab12”如果progressID的长度将发生变化,捕获此字段的最简单方法是什么 我

我正在编写一个SAS程序来与API交互。我试图使用SAS从API生成的文本文件中捕获特定字段

生成的文本“resp”如下所示:

{“结果”:{“progressId”:“ab12”,“完成百分比”:0.0,“状态”:“inProgress”},“meta”:{“requestId”:“abcde123”,“httpStatus”:“200-OK”}

我要捕获的字段是“progressID”。在这种情况下,它将是“ab12”如果progressID的长度将发生变化,捕获此字段的最简单方法是什么

我目前的做法如下:

/* The following section will import the text into a SAS table, 
seperated by colon. The third column would be "ab12","percentCompelte" 
*/
proc import out = resp_table 
datafile= resp
dbms = dlm REPLACE; 
delimiter = ':';GETNAMES = NO; 
run;

/* The following section will trim off the string ,"percentCompete"*/    
data resp_table;
    set resp_table;
    Progress_ID = SUBSTR(VAR3,2,LENGTH(VAR3)-20);
run;
您有更简单/更简洁的解决方案吗

谢谢


Shawn

您可以使用
JSON
库引擎读取JSON文档,并将内容复制到SAS数据集。使用引擎创建的数据项

例如:

filename myjson "c:\temp\sandbox.json";

data _null_;
  file myjson;
  input;
  put _infile_;
datalines;
{"result":{"progressId":"ab12","percentComplete":0.0,"status":"inProgress"},"meta":{"requestId":"abcde123","httpStatus":"200 - OK"}}
run;

libname jsondoc json "c:\temp\sandbox.json";

proc copy in=jsondoc out=work;
run;

proc print data=work.Alldata;
  where P1='result' and P2='progressId';
run;

您可以使用
JSON
库引擎读取JSON文档,并将内容复制到SAS数据集。使用引擎创建的数据项

例如:

filename myjson "c:\temp\sandbox.json";

data _null_;
  file myjson;
  input;
  put _infile_;
datalines;
{"result":{"progressId":"ab12","percentComplete":0.0,"status":"inProgress"},"meta":{"requestId":"abcde123","httpStatus":"200 - OK"}}
run;

libname jsondoc json "c:\temp\sandbox.json";

proc copy in=jsondoc out=work;
run;

proc print data=work.Alldata;
  where P1='result' and P2='progressId';
run;

您使用的SAS版本是什么?如果您可以访问JSON libname,那么速度会更快。否则,使用SCAN()根据分隔符解析文本,这样您就不必担心长度。正如@Reeza所说,这是一个JSON文件:,但JSON libname引擎是SasSasThank@Reeza和mjsqu最近添加的一个组件,感谢他们共享了这个惊人的方法!JSON libname解决了我的问题!您使用的SAS版本是什么?如果您可以访问JSON libname,那么速度会更快。否则,使用SCAN()根据分隔符解析文本,这样您就不必担心长度。正如@Reeza所说,这是一个JSON文件:,但JSON libname引擎是SasSasThank@Reeza和mjsqu最近添加的一个组件,感谢他们共享了这个惊人的方法!JSON libname解决了我的问题!