SAS 中的子串和反转

发布于 2024-12-20 00:56:57 字数 321 浏览 2 评论 0原文

我有一个 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+" "+Surname 的新变量,如下所示:

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

I have a SAS data set with observations like this:

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

where * is the field separator. How can I create a new variable that has First_name_letter+" "+Surname like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

澜川若宁 2024-12-27 00:56:57

试试这个。

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;

try this.

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;
夜清冷一曲。 2024-12-27 00:56:57

最干净的方法是使用 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 替换该变量。

The cleanest way to do this is with the Perl regular expression functionality that is built into SAS:

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

(I'm assuming that the *s in your question are actually field separators, because your other recent question asked how to deal with that.)

The expression (\w)\w* (\w+) causes the first letter of the first word of name and the second word of name to be put into variables $1 and $2. The rest of the command tells SAS to substitute $2 $1 for this variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文