我有一个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
答案 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
替换此变量。