SAS中的子串和反转

SAS中的子串和反转,sas,substr,Sas,Substr,我有一个SAS数据集,其中包含如下观察结果: Abatucci Pierre*L'entrée au château*1000*1*75*91 Agneessens Edouard*Jeune femme*6000*1*40*32*5 Abatucci Pierre ----> P Abatucci Agneessens Eduard ----> E Agneessens 其中*是字段分隔符。如何创建一个名为+字母+姓氏的新变量,如下所示: Abatucci Pierre*L'e

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

Abatucci Pierre*L'entrée au château*1000*1*75*91
Agneessens Edouard*Jeune femme*6000*1*40*32*5
Abatucci Pierre ----> P Abatucci
Agneessens Eduard ----> E Agneessens
其中*是字段分隔符。如何创建一个名为+字母+姓氏的新变量,如下所示:

Abatucci Pierre*L'entrée au château*1000*1*75*91
Agneessens Edouard*Jeune femme*6000*1*40*32*5
Abatucci Pierre ----> P Abatucci
Agneessens Eduard ----> E Agneessens
试试这个

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;
试试这个

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;

最干净的方法是使用SAS中内置的Perl正则表达式功能:

data names;
 set dataset;
 name = prxchange('s/(\w)\w* (\w+)/$2 $1/', -1, name);
run;
(我假设你问题中的*s实际上是字段分隔符,因为你最近的另一个问题是如何处理这个问题。)


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

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

data names;
 set dataset;
 name = prxchange('s/(\w)\w* (\w+)/$2 $1/', -1, name);
run;
(我假设你问题中的*s实际上是字段分隔符,因为你最近的另一个问题是如何处理这个问题。)


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

哪个数据库?你得给我们更多的信息,哪个数据库?你必须给我们更多的信息。