подсчет значений по предмету - PullRequest
0 голосов
/ 14 марта 2020

Я хотел бы добавить новый столбец в набор данных с именем COUNT. В моем наборе данных есть тема переменных tox1, tox2, tox3 (символьные переменные) с различными значениями. Предмет может появляться в моем наборе данных несколько раз, я хочу сосчитать вхождение 'ADR' на предмет. Я хочу создать новую переменную с именем COUNT, которая подсчитывает, сколько раз у субъекта задано значение c ie 'ADR' для tox1, tox2 и tox3; когда объект не имеет наблюдения для этого значения c, я хочу, чтобы результат COUNT был равен нулю.

Вот пример набора данных, который мне нужен (в этом примере я хочу считать каждый экземпляр "ADR" на SUBJECT как COUNT).

 INPUT subject $ tox1 $ tox2 $ tox3 $;
 datalines;
1   ADR c s
1   ADR d f
1   s ADR f
1   a w e 
2   d f g
3   e d ADR 
3   k ADR f
4   N ADR ADR
4   Q ADR d
4   ADR d f
4   r v h 
4   ADR f g
5   g f d
5   r t u
5   g h j   
;

ЭТО ВХОДНОЙ ДАННЫЙ СБОР

SUBJECT TOX1 TOX2 TOX3 COUNT
1   ADR c s    3
1   ADR d f    3
1   s ADR f    3
1   a w e      3
2   d f g      0 
3   e d ADR    2
3   k ADR f    2 
4   N ADR ADR  5
4   Q ADR d    5
4   ADR d f    5
4   r v h      5
4   ADR f g    5
5   g f d      0
5   r t u      0
5   g h j      0

ЭТО ТРЕБУЕТСЯ ВЫХОД ДЛЯ СЧЕТА, ПЕРЕМЕННОГО

1 Ответ

1 голос
/ 14 марта 2020

Вот подход с шагом данных

data have;
INPUT subject $ tox1 $ tox2 $ tox3 $; 
datalines; 
1 ADR c   s   
1 ADR d   f   
1 s   ADR f   
1 a   w   e   
2 d   f   g   
3 e   d   ADR 
3 k   ADR f   
4 N   ADR ADR 
4 Q   ADR d   
4 ADR d   f   
4 r   v   h   
4 ADR f   g   
5 g   f   d   
5 r   t   u   
5 g   h   j   
;

data want (drop = i);
   count = 0;
   do _N_ = 1 by 1 until (last.subject);
      set have;
      by subject;
      array tox {3};
      do i = 1 to dim(tox);
         if tox [i] = 'ADR' then count = sum(count, 1);
      end;
   end;
   do _N_ = 1 to _N_;
      set have;
      output;
   end;
run;

Результат:

count subject tox1 tox2 tox3 
3     1       ADR  c    s 
3     1       ADR  d    f 
3     1       s    ADR  f 
3     1       a    w    e 
0     2       d    f    g 
2     3       e    d    ADR 
2     3       k    ADR  f 
5     4       N    ADR  ADR 
5     4       Q    ADR  d 
5     4       ADR  d    f 
5     4       r    v    h 
5     4       ADR  f    g 
0     5       g    f    d 
0     5       r    t    u 
0     5       g    h    j 
...