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

问题描述 投票:0回答:3

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

这是我目前拥有的信息:

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

我希望新表看起来如下所示:

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

所以我只想修改表并在“疾病类型”列中切换信息,如果任何患者在“HaveDiseaseD”栏下有“是”。

逻辑将是这样的:

data have;
 set want;
   do i = 1 to dim(patientNum);
   if haveDiseaseD(i) == 'Y' then diseaseType(i) = D
      else diseaseType(i) = diseaseType(i)
run;
loops sas conditional
3个回答
2
投票

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

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

2
投票

考虑保持原始的疾病类型。有人必须询问被覆盖的疾病分类的普遍性或分布情况。

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

1
投票

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

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

data want ;
  set have ;
  if haveDiseaseD = 'Y' then diseaseType = 'D' ;
run ;
© www.soinside.com 2019 - 2024. All rights reserved.