我正在尝试修改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;
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;
SAS使用=作为比较运算符,而不是==。 SAS DATA步骤是一个隐式循环,因此您无需显式循环患者。在这样的简单步骤中,SET语句在循环的每次迭代中执行一次,并从HAVE数据集中读取记录。处理该记录然后输出。 DATA步骤底部有一个隐含的OUTPUT语句。
您的伪代码非常接近真正的SAS代码:
data want ;
set have ;
if haveDiseaseD = 'Y' then diseaseType = 'D' ;
run ;