Sas 每个主题的计数值

Sas 每个主题的计数值,sas,sas-macro,Sas,Sas Macro,我想向名为COUNT的数据集添加一个新列。我的数据集有一个变量主题,tox1,tox2,tox3(字符变量)具有不同的值。一个主题可以在我的数据集中出现多次,我想计算每个主题出现的'ADR'。我想做的是创建一个名为COUNT的新变量,该变量计算受试者具有特定值的次数,即tox1、tox2和tox3;当受试者没有观察到该特定值时,我希望COUNT的结果为零 下面是我想要的数据集的一个示例(在这个示例中,我想将每个主题的ADR的每个实例都计算为计数) 以下是一种数据步方法 data have; I

我想向名为
COUNT
的数据集添加一个新列。我的数据集有一个变量主题,
tox1
tox2
tox3
(字符变量)具有不同的值。一个主题可以在我的数据集中出现多次,我想计算每个主题出现的
'ADR'
。我想做的是创建一个名为
COUNT
的新变量,该变量计算受试者具有特定值的次数,即
tox1
tox2
tox3
;当受试者没有观察到该特定值时,我希望
COUNT
的结果为零

下面是我想要的数据集的一个示例(在这个示例中,我想将
每个
主题的
ADR
的每个实例都计算为
计数


以下是一种数据步方法

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 

你很幸运得到了答案。Stackoverflow不是代码编写服务。在您尝试或调查的内容以及您遇到的错误方面展示一些努力。说得好,你能做我的工作不是一个问题。老兄……我试着编写我的程序,但没有成功。我是stackoverflow的新手,我不知道这个接口。我不是在这里写代码,只是在展示程序。我还试图得到不同条件下的计数。请不要认为我浪费了你宝贵的时间。我尊重你的努力。谢谢德雷库特。那真的很有帮助。
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