SAS中的IN子句

时间:2013-08-29 11:46:24

标签: sas

我有以下数据集

data a;
input id stat$;
datalines;
10 a
20 a
10 t
40 t
;
run;  

我正在写下面的宏

%macro ath(inp);
data _null_;
set a (where=(id=&inp);
----if any one of the status of ID is 'a' then put 'valid';
else put 'invalid';----
%mend;

我是SAS的初学者。请帮我编写语法 - 如果ID的任何一个状态是'a',那么把'有效';否则就把'无效'

2 个答案:

答案 0 :(得分:2)

您希望扫描输入数据中的所有(选定)行,并测试其中是否有ID = 'a'行。你没有用IN子句做到这一点;这是针对每行的一组值进行测试,而不是针对所有行测试一个值。

data _null_;
    set a (where=(id = &inp);
    if id = 'a' then do;
        put 'valid';
        stop;
    end;
run;

答案 1 :(得分:0)

由于此处有where语句,您选择的所有ID肯定都有效吗?即您正在选择id = &inp的所有行,因此,如果您的变量&inp = 'a',那么新数据集的所有行都将有效。对不起,如果我在这里错过了什么!