【发布时间】:2021-03-09 20:07:28
【问题描述】:
在以下示例数据中,我尝试使用以下代码删除字符串中的重复子字符串:
data z;
input pvd_name_orig $50.;
datalines;
MD SMITH, JOHN MD
SMITH, JOHN W
MD T SMITH, JOHN W.
SMITH, JOHN WILLIAM
JOHN N MD SMITH MD
MD JOHN W. SMITH MD
MD SMITH, MD JOHN
;
run;
DATA want (keep=pvd_name_orig pvd_name_temp);
SET pvd_pmd_md;
pvd_name_temp=scan(pvd_name_orig, 1, ' ');
do i=2 to countw(pvd_name_orig,' ');
word=scan(pvd_name_orig, i, ' ');
found=find(pvd_name_temp, word, 'it');
if found=0 then pvd_name_temp=catx(' ', pvd_name_temp, word);
end;
run;
但是,上面的代码适用于所有名称,除了中间名首字母在字符串中重复的名称。在这种情况下,它会删除中间名的首字母,将其视为重复。有什么办法可以避免删除字符串中的单字母单词?
我尝试在中间名初始后手动添加一个句点,然后代码不会在新变量中删除它。但是,我无法使用 SAS 代码在中间名初始后添加句点。 我使用以下代码在第二个单词的第二个位置(随机)添加一个句点,但它只在字符串中的第二个字符添加一个句点。
data want;
set z;
if length(compress(scan(pvd_name_orig,2,' '),'.'))=1 then substr(pvd_name_orig,2,1)='.';
run;
我最终想要的输出是
Obs pvd_name_orig pvd_name_temp
1 MD SMITH, JOHN MD MD SMITH, JOHN
2 SMITH, JOHN W SMITH, JOHN W
3 MD T. SMITH, JOHN W. MD T. SMITH, JOHN W.
4 SMITH, JOHN WILLIAM SMITH, JOHN WILLIAM
5 JOHN N MD SMITH MD JOHN N MD SMITH
6 MD JOHN W. SMITH MD MD JOHN W. SMITH
7 MD SMITH, MD JOHN MD SMITH, JOHN
有什么建议吗??
【问题讨论】:
-
为什么
JOHN N不想转换成JOHN N. -
模糊匹配不干净的数据在最好的情况下是有问题的。 SAS 有专门处理这个问题的产品,而 LinkKing 是免费软件,旨在处理其中一些问题,但不确定您的数据是否适合。 the-link-king.party
-
@Richard
JOHN N可以转换为JOHN N.这不是问题。 -
您能否将问题标题更新为重复标记,或重复单词。如果医生的名字和姓氏相同怎么办?如果名称包含单个字母后跟逗号怎么办?逗号前应该加句号吗?