SAS: захват определенного поля в текстовом файле - PullRequest
0 голосов
/ 30 января 2019

Я пишу программу SAS для взаимодействия с API.Я пытаюсь использовать SAS для захвата определенного поля из текстового файла, созданного API.

Сгенерированный текст "resp" выглядит следующим образом:

{"result": {"progressId ":" ab12 ", "centComplete": 0.0, "status": "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;

У вас есть более простое / более краткое решение?

Спасибо!

Шон

1 Ответ

0 голосов
/ 30 января 2019

Вы можете использовать библиотечный движок 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;
...