首先,我充其量只有基本的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
;
我们将不胜感激,在此先感谢您。
答案 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要做的事情。