如何使用子字符串函数获取SAS中单词的最后一部分?
How to use substring function to get last part of a word in SAS?
我有一个要编辑的电子邮件列表。我有很多电子邮件,例如 @institution.dk 最后。我想删除所有这些类型的电子邮件。左边字符数不等长,所以我必须从右到左识别电子邮件。
我试过:
data B;
set a;
where var not equals 'institution.dk';
run;
和
data B;
set a;
where var equals not 'institution.dk';
run;
和
data B;
set a;
where substr(var,-1,14^= 'institution.dk';
run;
和
data b;
set a;
var2=scan(trim(var),-1,14) ;
run;
data c;
set b;
if var2 ^= institution.dk;
run;
但没有任何效果。如何让 SAS 识别字符串的最后部分(从右到左计数),以便删除这些观察结果?
扫描是正确的起点。电子邮件只能有一个'@',对吧?
email_account = scan(var,1,'@');
email_server = scan(var,2,'@');
现在您可以根据需要进行过滤。您不需要像上面那样执行两个步骤:
data b;
set a;
length email_server ;
email_server = scan(var,2,'@');
if email_server ne 'institution.dk';
run;
或
data b;
set a;
where scan(var,2,'@') ne 'institution.dk';
run;
SQL/WHERE 中还有一个有用的 LIKE 运算符(但不是 IF 或其他 SAS 数据步骤元素)。 '%' 在这里是通配符。
data b;
set a;
where not (var like '%@institution.dk');
run;
一种方法是索引:
If index(var,"@institution.dk") then delete;
另一种方法是使用正则表达式:
If prxmatch("#\@institution.dk#",var) then delete;
另一种更有用的方法可能是使用呼叫扫描:
Call scan(var,-1,pos,len,"@");
Var2=substr(var,pos);
If var2="institution.dk" then delete;
第 1 行为 @ 后的最后一个单词创建 pos 和 len 变量,第 2 行创建一个包含该信息的变量 var2,第 3 行测试它是否与您要排除的字符串匹配,如果匹配则删除 returns 为真。
我有一个要编辑的电子邮件列表。我有很多电子邮件,例如 @institution.dk 最后。我想删除所有这些类型的电子邮件。左边字符数不等长,所以我必须从右到左识别电子邮件。
我试过:
data B;
set a;
where var not equals 'institution.dk';
run;
和
data B;
set a;
where var equals not 'institution.dk';
run;
和
data B;
set a;
where substr(var,-1,14^= 'institution.dk';
run;
和
data b;
set a;
var2=scan(trim(var),-1,14) ;
run;
data c;
set b;
if var2 ^= institution.dk;
run;
但没有任何效果。如何让 SAS 识别字符串的最后部分(从右到左计数),以便删除这些观察结果?
扫描是正确的起点。电子邮件只能有一个'@',对吧?
email_account = scan(var,1,'@');
email_server = scan(var,2,'@');
现在您可以根据需要进行过滤。您不需要像上面那样执行两个步骤:
data b;
set a;
length email_server ;
email_server = scan(var,2,'@');
if email_server ne 'institution.dk';
run;
或
data b;
set a;
where scan(var,2,'@') ne 'institution.dk';
run;
SQL/WHERE 中还有一个有用的 LIKE 运算符(但不是 IF 或其他 SAS 数据步骤元素)。 '%' 在这里是通配符。
data b;
set a;
where not (var like '%@institution.dk');
run;
一种方法是索引:
If index(var,"@institution.dk") then delete;
另一种方法是使用正则表达式:
If prxmatch("#\@institution.dk#",var) then delete;
另一种更有用的方法可能是使用呼叫扫描:
Call scan(var,-1,pos,len,"@");
Var2=substr(var,pos);
If var2="institution.dk" then delete;
第 1 行为 @ 后的最后一个单词创建 pos 和 len 变量,第 2 行创建一个包含该信息的变量 var2,第 3 行测试它是否与您要排除的字符串匹配,如果匹配则删除 returns 为真。