这样做的简单方法是通过使用@@和分隔符作为'['读取来生成键值对。在使用proc转置生成键值对之后,您可以生成完全相同的结果。这样,如果未来增加了更多属性值对,代码仍然能够完美地生成结果。检查下面的代码。
data have;
length key value $ 20.;
retain key ' ';
retain group 1;
infile datalines dlm=']' ;
input text :$char20. @@;
key=lag(text);
if find(text,'[/') then do;
key=scan(key,2,'[','mo');
value=scan(text,1,'[');
output;
end;
drop text;
datalines;
[INTERCEPT]-2[/INTERCEPT] [COUNTRY]MY[/COUNTRY] [LOG_AMT]0.2354[/LOG_AMT] [BETAX]-11.08325[/BETAX]
;;;;
run;
proc transpose data=have out=want(drop=group _name_);
by group;
var value;
id key;
idlabel key;
run;
proc print data=want;run;
就个人而言,我更喜欢使用sas perl正则表达式来打破关键值对中的属性/值。您也可以考虑将属性/值分解为键值对。
如果您为自己的问题付出更多努力,尤其是显示迄今为止已尝试过的代码,或者已经完成的研究,则更有可能得到有用的答案。 – 2015-04-03 15:40:33
如果您的文件最初是JSON,XML或HTML数据,这将有助于指出,还有其他方法可以读取此类文件。 – Reeza 2015-04-03 17:09:40