根据 Y/N 列修改 SAS 中的行

Modifying rows in SAS based on Y/N column

我正在尝试修改 SAS 中具有特定条件的某些行的列。

这是我目前掌握的信息:

patientNum    siteNum   diseaseType   haveDiseaseD
001           12        A             N
002           14        B             N
003           15        C             Y

我希望新的 table 看起来像下面这样:

patientNum    siteNum   diseaseType   
001           12        A             
002           14        B             
003           15        D

所以我只想修改 table 并切换 "DiseaseType" 栏中的信息,如果任何患者在 "HaveDiseaseD" 栏下有 "Yes"。

逻辑是这样的:

data have;
 set want;
   do i = 1 to dim(patientNum);
   if haveDiseaseD(i) == 'Y' then diseaseType(i) = D
      else diseaseType(i) = diseaseType(i)
run;

SAS 使用 = 作为比较运算符,而不是 ==。 SAS DATA 步骤是一个隐式循环,因此您不需要显式循环遍历患者。在这样一个简单的步骤中,SET 语句在循环的每次迭代中执行一次,并从 HAVE 数据集中读取一条记录。该记录被处理然后输出。 DATA 步底部有一个隐含的 OUTPUT 语句。

您的伪代码非常接近真实的 SAS 代码:

data want ;
  set have ;
  if haveDiseaseD = 'Y' then diseaseType = 'D' ;
run ;

SAS 自动逐行循环遍历数据。您不需要指定数组或维度。由于如果另一列满足条件,您只需更改一列的一个值,您的程序将只有四行代码。

data have;
    set want;
    if(haveDiseaseD = 'Y') then diseaseType = 'D';
run;

考虑保持原来的疾病类型。肯定有人会问覆盖疾病分类的流行或分布。

data want;
  set have (rename=diseaseType=diseaseType_original);
  if haveDiseaseD = 'Y' 
    then diseaseType = 'D';
    else diseaseType = diseaseType_original;
run;