proc iml中循环内的多个if条件

时间:2014-07-13 02:16:47

标签: sas sas-iml

我正在使用proc iml来操纵数据集。我正在使用if语句检查两个条件

如果值为-7或-8,我在下面编写了此代码,但 if语句给出了错误,因为我正在指定或条件不正确。请帮忙。

Proc iml;
use Adult;
read all var {AB34 AC7 AB63 SRSEX RACECEN  } into Var1 ;

use Adultf;
read all var {AB34_x AC7_X AB63_X} into VarMiss ;

Var2 = Var1;
HrtIss_X = VarMiss[,1];

DO i=1 to nrow(Var2);
    if HrtIss_X[i,1] = -7 or HrtIss_X[i,1] = -8  then Var2[i,1]=.;
end;

1 个答案:

答案 0 :(得分:0)

首先,您需要使用|代替OR(和&而不是AND)。很烦人,我知道,但IML只适用于那些。

其次,你没有做到最有效(也是最IMLy)的方式。使用LOC

Proc iml;
use sashelp.class;
read all var {name sex } into Var1 ;

read all var {age} into VarMiss ;

Var2 = Var1;
HrtIss_X = VarMiss[,1];
DO i=1 to nrow(Var2);
    if (HrtIss_X[i,1] = 13) | (HrtIss_X[i,1] = 14)  then Var2[i,1]=' ';
end;
print var2;
*Better way to do this;
var2[loc(HrtIss_X = 13|HrtIss_X=14),2]=' ';
print var2;
quit;

这应该更有效,并且是一种更加面向矩阵的方法。 LOC获取与HrtIss_X匹配的行等于任何值,并返回其行号,您可以将其传递给var2以对其进行子集化。