2015-04-03 179 views
-3

如何将下面的字符串(多个分隔符)拆分为SAS中的单独列?SAS中有多个分隔符的分割字符串

[INTERCEPT] -2- [/ INTERCEPT] [国家] MY [/国家] [LOG_AMT] 0.2354 [/ LOG_AMT] [BETAX] -11.08325 [/ BETAX]

> INTERCEPT COUNTRY LOG_AMT  BETAX 
> -2   MY  0.2354 -11.08325 
+2

如果您为自己的问题付出更多努力,尤其是显示迄今为止已尝试过的代码,或者已经完成的研究,则更有可能得到有用的答案。 – 2015-04-03 15:40:33

+0

如果您的文件最初是JSON,XML或HTML数据,这将有助于指出,还有其他方法可以读取此类文件。 – Reeza 2015-04-03 17:09:40

回答

2

这样做的简单方法是通过使用@@和分隔符作为'['读取来生成键值对。在使用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正则表达式来打破关键值对中的属性/值。您也可以考虑将属性/值分解为键值对。