根据是/否列修改SAS中的行

时间:2018-09-05 19:00:58

标签: loops sas conditional

我正在尝试为特定条件下的某些行修改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”列下有“是”,我只想修改表格并切换“ DiseaseType”列中的信息。

逻辑类似于:

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

3 个答案:

答案 0 :(得分:2)

SAS自动逐行循环遍历数据。您无需指定数组或尺寸。由于只有另一列满足条件时才需要更改列的一个值,因此您的程序将只有四行代码。

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

答案 1 :(得分:2)

请考虑保持原始的疾病类型。一定有人会问到覆盖的疾病分类的流行或分布。

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

答案 2 :(得分:1)

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

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

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