我正在使用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;
答案 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以对其进行子集化。