SAS:如何遍历数据集,以替换从另一数据集中的列读取的(大型)字符串列表?

时间:2018-12-04 08:49:47

标签: loops sas

首先,我充其量只有基本的SAS技能,所以请原谅我这是一个愚蠢的问题。

基本上,我有一个较大的自由文本字段,需要删除名称并用“ [NAME REDACTED]”占位符替换。

要替换的名称列表长412k obs(即我无法手动键入列表),因此我需要在存储它们的数据集中的列中引用它们。该数据集以以下形式出现:

ID    Name
1     Jim
2     Steve
3     Susan
4     Karen

下面是我要做什么的粗略想法(尽管当然不会运行),其中“ SELECT NAME from LIB.NAMELIST.Name”是我不知道如何引用的部分。

data=have;
set=want;
nstart=1;
nfinish=412000;
do while(nstart<=nfinish);
TRANWRD(DescriptionField,(*SELECT NAME FROM LIB.NAMELIST.Name WHERE ID = 
nstart*),"[NAME REDACTED]");
nstart+1
;
END
;

我们将不胜感激,在此先感谢您。

1 个答案:

答案 0 :(得分:2)

这是一种使用临时数组保存名称列表的方法:

data name_list;
  input ID  Name $;
  datalines;
1     Jim
2     Steve
3     Susan
4     Karen
;
run;

data have;
  input text $100.;
  infile datalines truncover;
  datalines;
Jim AAA
Steve Susan BBB
Susanne CCC
;
run;

proc sql noprint;
  select count(*) into :n from name_list ;
quit;

data want;
  set have;
  array names[&n] $8 _temporary_;
  if _n_ = 1 then do i = 1 to &n;
    set name_list(keep = name);
    names[i] = name;
  end;
  do i = 1 to &n;
    text = tranwrd(text,strip(names[i]),'[NAME REDACTED]');
  end;
 keep text;
run;

如果采用这种方法,您可能还希望考虑对Scunthorpe problem要做的事情。