SAS中的子串和反转

时间:2011-12-06 22:37:16

标签: sas substr

我有一个SAS数据集,其观察结果如下:

Abatucci Pierre*L'entrée au château*1000*1*75*91
Agneessens Edouard*Jeune femme*6000*1*40*32*5

其中*是字段分隔符。如何创建具有First_name_letter +"的新变量? " +这样的姓氏:

Abatucci Pierre ----> P Abatucci
Agneessens Eduard ----> E Agneessens

2 个答案:

答案 0 :(得分:2)

试试这个。

data name;
infile cards dlm='*';
length name name2 $35 entree $35;
input name entree calories portion cost weight;
name2=substr(scan(name,2,' '),1,1) ||' '||scan(name,1,' ');
datalines;
Abatucci Pierre*L'entrée au château*1000*1*75*91
Agneessens Edouard*Jeune femme*6000*1*40*32*5
run;

答案 1 :(得分:2)

最简洁的方法是使用内置于SAS的Perl正则表达式功能:

data names;
 set dataset;
 name = prxchange('s/(\w)\w* (\w+)/$2 $1/', -1, name);
run;

(我假设你问题中的* s实际上是字段分隔符,因为你最近的另一个问题是如何处理它。)

表达式(\w)\w* (\w+)会将name的第一个单词的第一个字母和name的第二个单词放入变量$1$2 。命令的其余部分告诉SAS用$2 $1替换此变量。