我的代码和问题:
data Scinamy;
input Description $20. ;
datalines;
New old Active
New Active Old
ANother record
Records with Gold
Value with Gold
;
Data Scinamy1;
set Scinamy;
array lista[3] $ _temporary_ ('Active','Gold','Prime');
do i = LBound(lista) To HBound(lista);
if find(upcase(lista{i}),upcase(Description)) > 0 then
do;
AA= upcase(lista{i});
leave;
end;
else
do;
AA = 'not contain';
end;
end;
run;
此代码仅为数组中的所有记录提供第一个值。 如果在字符串中找到合适的值,我如何映射数组中的所有值并从数组中放入值? 最好的问候!
答案 0 :(得分:0)
没有任何样本数据很难说,但我相信问题是后续数组值会覆盖变量AA。如果要查看输出的数组中每列的值,则必须创建一个与Lista大小相同的数组来保存不同的值。像这样的东西
Data Scinamy1;
set Scinamy;
array lista[3] $ _temporary_ ('Active','Gold','Prime');
array new[3] $ AA1 - AA3;
do i = LBound(lista) To HBound(lista);
if find(upcase(Description),strip(upcase(lista{i}))) > 0 then
do;
new[i]= upcase(lista{i});
leave;
end;
else
do;
new[i] = 'not contain';
end;
end;
run;
如果您添加一些数据,但如果您的程序与您实际需要的程序略有不同,则更容易解决您的问题。
我发现你正在寻找Active,Gold和Prime的描述。所以我更新了你的查找功能。
答案 1 :(得分:0)
我添加了示例数据:
data Scinamy;
input Description $20. ;
datalines;
New old Active
New Active Old
ANother record
Records with Gold
Value with Gold
;
答案 2 :(得分:0)
我发现FINDW()
是用于此类搜索的更好功能。当它们只包含在较大的单词中时,它将避免找到字符串。您可以使用修饰符使其不区分大小写并修剪空白。
我喜欢使用SPIT
作为修饰符。 SP
会将空格和标点符号添加为分隔符,IT
将忽略大小写和修剪空白。
在DO循环后设置失败所需的值。
data Scinamy;
input Description $30. ;
datalines;
New old Active
New Active Old
Another record subprime
Records with gold
Value with Gold
Prime Gold Active
;
data Scinamy1;
set Scinamy;
array lista(3) $8 _temporary_ ('Active','Gold','Prime');
length AA $30 ;
do i = 1 to dim(lista);
if findw(Description,lista(i),,'spit') then AA=catx(' ',AA,lista(i));
end;
if missing(AA) then AA='Not Found';
drop i;
run;
答案 3 :(得分:0)
我有一个额外的问题。 如何在数组中的places字典上设置另一个表?
array lista(3) $8 _temporary_ ('Active','Gold','Prime');
相反('Active','Gold','Prime')从另一个表中放置值?