Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops SAS:如何通过数据集循环替换从另一个数据集中的列中读取的(大)字符串列表?_Loops_Sas - Fatal编程技术网

Loops SAS:如何通过数据集循环替换从另一个数据集中的列中读取的(大)字符串列表?

Loops SAS:如何通过数据集循环替换从另一个数据集中的列中读取的(大)字符串列表?,loops,sas,Loops,Sas,首先,我充其量只有基本的SAS技能,所以请原谅我,这是一个愚蠢的问题 基本上,我有一个大的自由文本字段,我需要通过删除名称并替换为“[名称编辑]”占位符来编辑 要替换的名称列表的长度为412k obs(即,我无法手动键入列表),因此我需要在存储它们的数据集中的列中引用它们。此数据集以以下形式显示: ID Name 1 Jim 2 Steve 3 Susan 4 Karen 下面是我不知道如何引用的“selectname from LIB.NAMELIST.

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

基本上,我有一个大的自由文本字段,我需要通过删除名称并替换为“[名称编辑]”占位符来编辑

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

ID    Name
1     Jim
2     Steve
3     Susan
4     Karen
下面是我不知道如何引用的“selectname 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
;
data=have;
设置=需要;
nstart=1;
nfinish=412000;

do while(nstart这里有一种方法,使用临时数组保存名称列表:

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;

你也可以考虑如果你采用这种方法,你想做些什么。

这里有一种方法,使用一个临时数组来保存名称列表:

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;

如果你采用这种方法,你也可以考虑你想做什么。< /p>如果你的名字列表中有“代码>约翰<代码>,你还需要修改在自由文本字段中可能出现的小错误和变异吗?例如:<代码>约翰< /代码>,<代码>乔恩< /代码>,<代码> Kohn >代码>等等。o、 每个名字都是一个单词,或者你在一个字段中有

Firstname Lastname
条目,还是名字和姓氏的单独字段?两者都很好,只是名字列中的LIB.NAMELIST中的列表需要从have中的description字段中进行编辑,不需要其他变体。另外,如果它是任何相关的nce,Have有5000个OB。如果
John
在您的姓名列表中,您是否还需要编辑自由文本字段中可能出现的轻微打字错误和变体?例如
John
jon
Kohn
等?您需要在这里多谨慎?此外,每个姓名都是一个单词,还是您有
Firstname-Lastname
en在单个字段中尝试,或在单独的字段中尝试名字和姓氏?您好,这只是名称列中LIB.NAMELIST中包含的列表,需要从Have中的DescriptionField中进行编辑,不需要其他变体。另外,如果有任何关联,Have有5000 obs。我不明白缺少什么。请澄清。谢谢ou,我真的很感激,这非常有帮助-这表明我对SAS一无所知,我完全不知道您可以在一个数据步骤中单独设置多个要引用的数据集。(为混淆道歉,我在没有正确阅读答案的情况下开始键入注释)。我不明白遗漏了什么。请澄清。谢谢,我真的很感激,这非常有用-这表明我对SAS的无知,我完全不知道您可以在一个数据步骤中单独设置多个数据集进行引用。(很抱歉造成混淆,我在没有正确阅读答案的情况下开始输入评论)。