0

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

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

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;
4

1 回答 1

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 以对其进行子集化。

于 2014-07-13T13:04:37.950 回答