在子集化IF中使用数组变量而不指定数组变量的数量

时间:2014-12-09 20:16:23

标签: sas datastep

在SAS中,我有几列美元值和其他几列。如果所有美元值都有0值,我不关心一行数据,我不希望最终数据中包含这些行。作为美元值的列已经在数组Fix_Missing中。我在数据步骤中。

所以,例如,我可以这样做:

IF Fix_Missing{1} NE 0 OR Fix_Missing{2} NE 0 OR Fix_Missing{3} NE 0;

但是,数组中的变量数量可能会发生变化,我希望无论代码中包含多少变量,代码都能正常工作。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:3)

在大多数接受不计数变量列表的函数中,您可以使用of array[*]

if sum(of fix_missing[*]) > 0
例如,假设fix_missing不能具有负值,则可以使用

。您也可以将其与CATS一起使用,例如:

if cats(of fix_missing[*]) ne '000';

会起作用,你可以做这样的事情:

if cats(of fix_missing[*]) ne repeat('0',dim(fix_missing)-1);

如果你可能有未知数量的数组元素(repeat需要一个字符并重复n + 1次)。

另一个有用的功能,可能在这里没有用,但同样有用,是whichnwhichc(同一事物的数字/字符版本)。如果你想知道他们中的任何一个是否有0:

if whichn(0,of fix_missing[*]) > 0;

返回它找到的第一个零的位置。