2013-08-16 45 views
1

今天早上我遇到了這個問題,我仍然試圖弄清楚它可以做到。以下數據集存在並具有字符變量CAT。如何將字符串修改爲字符值,其中字符串的每個字符用逗號分隔?

CAT

AB

ABCD
CB
。 。 。 等。

如果字符串的長度大於1,我們需要編寫SAS程序來在字符串的每個字符之間引入逗號。我使用了length()函數並使用do循環創建不同的變量,並且它只是混亂。我如何解決這個問題?

回答

1

正則表達式溶液:

data have; 
input CAT $; 
datalines; 
A 
AB 
B 
ABCD 
CB 
;;;; 
run; 

data want; 
set have; 
cat_c = prxchange('s/(?<=[[:alpha:]])([[:alpha:]])/,$1/io',-1,CAT); 
put cat_c=; 
run; 

第一括號組是一個向後看用於字母字符;然後捕獲到的字母字符。然後用逗號和字符替換。如果你想要的東西不是[[:alpha:]](即,A-Z),那麼將它作爲一個類來提供。

使用長度和做循環的解決方案並不差,老實說,如果你想要新手程序員更易讀的東西。只需使用等號左邊的SUBSTR即可。

data want2; 
set have; 
if length(cat) > 1 then 
    do _t = 1 to length(cat)-1; 
    substr(cat_c,2*_t-1,2)=substr(cat,_t,1)||','; 
    end; 
substr(cat_c,2*length(cat)-1,1)=substr(cat,length(cat),1); 
put cat_c=; 
run; 
相關問題