1
今天早上我遇到了這個問題,我仍然試圖弄清楚它可以做到。以下數據集存在並具有字符變量CAT。如何將字符串修改爲字符值,其中字符串的每個字符用逗號分隔?
CAT
甲
AB
乙
ABCD
CB
。 。 。 等。
如果字符串的長度大於1,我們需要編寫SAS程序來在字符串的每個字符之間引入逗號。我使用了length()函數並使用do循環創建不同的變量,並且它只是混亂。我如何解決這個問題?
今天早上我遇到了這個問題,我仍然試圖弄清楚它可以做到。以下數據集存在並具有字符變量CAT。如何將字符串修改爲字符值,其中字符串的每個字符用逗號分隔?
CAT
甲
AB
乙
ABCD
CB
。 。 。 等。
如果字符串的長度大於1,我們需要編寫SAS程序來在字符串的每個字符之間引入逗號。我使用了length()函數並使用do循環創建不同的變量,並且它只是混亂。我如何解決這個問題?
正則表達式溶液:
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;