根据 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;
我正在尝试修改 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;