我正在尝试为特定条件下的某些行修改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;
答案 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 ;