SAS如果从数组中查找值,则从数组中输入值

时间:2018-06-12 11:56:30

标签: arrays sas

我的代码和问题:

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;

此代码仅为数组中的所有记录提供第一个值。 如果在字符串中找到合适的值,我如何映射数组中的所有值并从数组中放入值? 最好的问候!

4 个答案:

答案 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;

enter image description here

答案 3 :(得分:0)

我有一个额外的问题。 如何在数组中的places字典上设置另一个表?

 array lista(3) $8 _temporary_ ('Active','Gold','Prime');

相反('Active','Gold','Prime')从另一个表中放置值?