I know that this may look more ugly than necessary, but it follows "if in doubt, use brute force": data want (keep=seriesID year period periodName value code text); infile '$HOME/sascommunity/SeriesDataOut.txt' lrecl=4096 truncover; length data_line $ 4096 seriesID $ 20 year 4 period $ 3 periodName $ 20 value 8 code $ 1 text $ 30 ; input; data_line = _infile_; if substr(data_line,1,12) = '[{"seriesID"'; data_line = substr(data_line,15); i = indexc(data_line,'"'); seriesID = substr(data_line,1,i-1); i = index(data_line,'":['); data_line = substr(data_line,i+4); * removes first { from remaining string; i = index(data_line,'},{'); do while (i ne 0); sub_line = substr(data_line,1,i-1); data_line = substr(data_line,i+3); %macro process_subline; i = index(sub_line,'year":"'); year = input(substr(sub_line,i+7,4),4.); i = index(sub_line,'period":"'); period = substr(sub_line,i+9,3); i = index(sub_line,'periodName":"'); sub_line = substr(sub_line,i+13); i = indexc(sub_line,'"'); periodName = substr(sub_line,1,i-1); i = index(sub_line,'value":"'); sub_line = substr(sub_line,i+8); i = indexc(sub_line,'"'); value = input(substr(sub_line,1,i-1),best5.); i = index(sub_line,'footnotes":[{'); sub_line = substr(sub_line,i+13,length(sub_line)-i-14); i = index(sub_line,'code":"'); sub_line = substr(sub_line,i+7); i = indexc(sub_line,'"'); code = substr(sub_line,1,i-1); i = index(sub_line,'text":"'); sub_line = substr(sub_line,i+7); text = substr(sub_line,1,length(sub_line)-1); output; %mend; %process_subline; i = index(data_line,'},{'); end; sub_line = data_line; %process_subline; run;
... View more