如何用SAS或PROC SQL去除列中的字符串与标点符号?
SAS/PROC SQL 实现公司名称标准化处理
方法一:SAS 数据步处理
先创建示例数据集,再通过字符串函数逐步完成清洗:
/* 创建原始数据集 */ data raw_data; input Company $20.; datalines; Amazon Amazon.com Amazon.llc Amazon.ltd Amazon corp Amazon stores ; run; /* 清洗数据:移除指定后缀、标点、空格 */ data cleaned_data; set raw_data; /* 移除所有标点符号 */ temp_str = compress(Company, '', 'p'); /* 依次移除指定后缀字符串(如需不区分大小写,可先转成统一大小写) */ temp_str = tranwrd(temp_str, 'COM', ''); temp_str = tranwrd(temp_str, 'LLC', ''); temp_str = tranwrd(temp_str, 'LTD', ''); temp_str = tranwrd(temp_str, 'CORP', ''); temp_str = tranwrd(temp_str, 'STORES', ''); /* 移除所有空格得到最终清洗结果 */ Clean_Company = compress(temp_str, '', 's'); /* 可选:用PROPCASE统一首字母大写格式 */ /* Clean_Company = propcase(compress(temp_str, '', 's')); */ drop temp_str; run; /* 查看清洗后的数据 */ proc print data=cleaned_data noobs; run;
方法二:PROC SQL 实现
通过嵌套字符串函数在SQL语句中完成批量清洗:
/* 基于已创建的raw_data数据集处理 */ proc sql; create table cleaned_data_sql as select Company, /* 嵌套函数依次完成标点移除、指定后缀替换、空格移除 */ compress( tranwrd( tranwrd( tranwrd( tranwrd( tranwrd( compress(Company, '', 'p'), 'COM', '' ), 'LLC', '' ), 'LTD', '' ), 'CORP', '' ), 'STORES', '' ), '', 's' ) as Clean_Company /* 可选:统一首字母大写格式 */ /* propcase(compress(tranwrd(...), '', 's')) as Clean_Company */ from raw_data; quit;
关键函数说明
compress(var, '', 'p'):移除变量中的所有标点符号,'p'代表匹配标点类字符tranwrd(source, target, replacement):将字符串中的目标内容替换为指定值(此处替换为空以删除目标后缀)compress(var, '', 's'):移除变量中的所有空格,'s'代表匹配空格类字符propcase(var):将字符串转换为首字母大写、其余小写的格式(可选,用于统一名称展示格式)
内容的提问来源于stack exchange,提问作者L H
相关产品推荐
相关产品推荐

