如何在 DATA STEP (SAS) 中使用数组对数据进行子集化?
How do I subset data with arrays in DATA STEP (SAS)?
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
DO i = 1 TO 10;
IF arrayname(i) = "x";
END;
RUN;
以上代码无效。我试图只显示其中一个 arrayname 列包含 "x".
的观察结果
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
if whichc('x', of arrayname(*));
RUN;
尝试使用 WHICHC 来过滤记录。
它不起作用的原因是子集 if
将立即 return
而不是在遇到 false
值时继续处理。这相当于:
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
DO i = 1 TO 10;
IF arrayname(i) ne "x" then delete;
END;
RUN;
您需要做的是确定 任何 值是否为真,并且 if
仅当该值为真时。您可以像 Reeza 指出的那样使用 whichc
(如果找到您要查找的值,则 returns 为 TRUE 值,否则为 FALSE);或者你可以像这样以类似的方式迭代:
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
has_x=0;
DO i = 1 TO 10;
IF arrayname(i) = "x" then has_x=1;
END;
if has_x;
RUN;
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
DO i = 1 TO 10;
IF arrayname(i) = "x";
END;
RUN;
以上代码无效。我试图只显示其中一个 arrayname 列包含 "x".
的观察结果DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
if whichc('x', of arrayname(*));
RUN;
尝试使用 WHICHC 来过滤记录。
它不起作用的原因是子集 if
将立即 return
而不是在遇到 false
值时继续处理。这相当于:
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
DO i = 1 TO 10;
IF arrayname(i) ne "x" then delete;
END;
RUN;
您需要做的是确定 任何 值是否为真,并且 if
仅当该值为真时。您可以像 Reeza 指出的那样使用 whichc
(如果找到您要查找的值,则 returns 为 TRUE 值,否则为 FALSE);或者你可以像这样以类似的方式迭代:
DATA output;
SET arbitrary_table;
ARRAY arrayname $ arrayname_1 - arrayname_10;
has_x=0;
DO i = 1 TO 10;
IF arrayname(i) = "x" then has_x=1;
END;
if has_x;
RUN;