Образец 33078: Как найти конкретное значение в любой переменной в любом наборе данных SAS® в библиотеке - PullRequest
1 голос
/ 07 марта 2019

Мне нужна помощь для изменения этого кода из SAS (http://support.sas.com/kb/33/078.html), чтобы быть:

  • Не чувствительно к регистру (поэтому не пропуская СМИТ против Смита и Смита, я попробовал "upcase", но это не сработает)
  • Включите счетчик (чтобы я мог контролировать либо знать, когда в первый раз появляется значение, и, если необходимо, сколько раз это значение появляется)
  • Разрешить частичный поиск (этот код позволяет искать только точное совпадение, что означает, что я пропускаю много возможных переменных, для которых можно определить значение)

Спасибо! :)

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Из вашего комментария:

data _null_; 
  set &librf..&&ds&i;
%do j=1 %to &numvars;
   if INDEX(upcase(&&var&j),"&string") >0 then 
/*modified this part to satisfy the first and third things that I wanted*/
      put "String &string found in dataset &librf..&&ds&i for variable &&var&j"
   ; 
%end; 
run;

Так что просто добавьте код, чтобы увеличить счетчик. Хотите посчитать наблюдения или происшествия? То есть, если одно и то же наблюдение имеет несколько попаданий, считается ли оно одним или несколькими?

Подсчет каждого удара проще:

data _null_; 
  set &librf..&&ds&i;
%do j=1 %to &numvars;
   if INDEX(upcase(&&var&j),"&string") >0 then do;
      _count+1;
      put "String &string found in dataset &librf..&&ds&i for variable &&var&j" _count=;
   end; 
%end; 
run;

Вот как вы можете рассчитывать каждое наблюдение.

data _null_; 
  set &librf..&&ds&i;
%do j=1 %to &numvars;
   if INDEX(upcase(&&var&j),"&string") >0 then do;
      _hit=1;
      put "String &string found in dataset &librf..&&ds&i for variable &&var&j";
   end; 
%end;
   if _hit then do;
      _count+1;
      put "Number of observations so far=" _count ;
   end; 
run;
0 голосов
/ 07 марта 2019

Предполагается, что вы запускаете код в образце. Я бы изменил выражение сравнения. Я бы сделал это параметром макроса. Вы можете использовать FIND / W / C, регулярное выражение и т. Д.

ехр =% Обл (найти (&& вар & J '- цель -', 'IT')),

% без кавычек (& exp), чтобы заменить подчеркнутый красным.

enter image description here

...