SAS: Как перебрать набор данных, заменив (большой) список строк, прочитанных из столбца в другом наборе данных? - PullRequest
0 голосов
/ 04 декабря 2018

Во-первых, я в лучшем случае обладаю элементарными навыками SAS, поэтому, пожалуйста, прости меня, это глупый вопрос.

По сути, у меня есть большое свободное текстовое поле, которое мне нужно отредактировать, удалив имена и заменив на "[ИМЯ УДАЛЕНО] "placeholder.

Список заменяемых имен составляет 412 КБ (т.е. я не могу вручную напечатать список), поэтому мне нужно сослаться на них в столбце в наборе данных, гдеони хранятсяЭтот набор данных отображается в виде:

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 голосов
/ 04 декабря 2018

Вот один из способов сделать это, используя временный массив для хранения списка имен:

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 если вы принимаете такой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...