2015-04-03 894 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正則表達式來打破關鍵值對中的屬性/值。您也可以考慮將屬性/值分解爲鍵值對。