0

我有一个数据集,其中包含一个名为“name”的字符变量。它包含这样一个人的全名:“firstname middlename lastname”。

我想重新排列数据,使其变为:“姓氏,名字中间名”。

我不是 SAS 函数的核心,但我使用了一些我知道的。

(我的代码可以在下面看到)。

在第一次尝试(test2)中,我没有得到我想要的结果 - 我得到:“lastName , firstName middleName” 而不是“lastName, firstName middleName” - 我的问题是逗号。

所以我认为我可以通过在末尾添加一个包含逗号的新姓氏变量来解决我的问题(在 test2_new 中)。但我没有得到我想要的?SAS最后放了三个点,而不是逗号?

我希望比我有更多SAS技能的人可以回答我的问题??

亲切的问候玛丽亚 在此处输入图像描述

4

2 回答 2

2

PERL 表达式在这里是一个有用的工具,尤其是 PRXCHANGE。SAS 支持网站提供了一个很好的例子来说明如何颠倒名字和姓氏,这里是对该代码的轻微修改。我只为有 2 个或 3 个名字的人提供服务,但如果需要,扩展它应该相当简单。我的代码基于在@Chris J 的答案中创建的 HAVE 数据集。

data want;
set have;
if countw(text)=2 then text = prxchange('s/(\w+) (\w+)/$2, $1/', -1, text);
else if countw(text)=3 then text = prxchange('s/(\w+) (\w+) (\w+)/$3, $1 $2/', -1, text);
run;
于 2014-06-20T14:53:46.877 回答
2
数据有;
  输入@1 文本和 64 美元。;
数据线;
苏珊·史密斯
大卫·詹姆森
布鲁斯·托马斯·福赛​​思
;
跑 ;

数据要;
  设置有;
  姓氏=扫描(文本,-1,'');
  名字 = substr(text,1,length(text)-length(lastname)) ;
  新名字 = catx(', ',姓氏,名字) ;
跑 ;

这使

文本 姓 名 新名

苏珊·史密斯·史密斯苏珊·史密斯,苏珊
大卫 A 詹姆逊 詹姆逊 大卫 A 詹姆逊,大卫 A
布鲁斯·托马斯·福赛​​斯·福赛斯·布鲁斯·托马斯·福赛​​斯·布鲁斯·托马斯
于 2014-06-20T13:25:59.327 回答