检查一个数据集中的每个值是否等于另一个数据集列中的ANY值

时间:2014-11-18 21:17:30

标签: sas

我有一个带有id,name,start_date,end_date和code的数据集(mydata)。然后我有另一个只有一列的数据集(代码),即代码列表。我想找到一种方法来查看每个人的代码是否与代码列表中的任何代码匹配(2004年1月1日到2005年12月31日之间)。我试图将代码列表中的所有代码放入宏变量列表中,但代码列表中的代码太多,因此会被截断...

到目前为止,这是我的代码:

 proc sql noprint; 
     select distinct * 
     into : codelist separated by ' '
     from codes
 quit;  

data 20042005; set mydata codes;
match = 0;
    if code in (%codelist) AND start_date >= '01jan2004'd AND end_date <='31dec2005'd
    THEN match = 1;
run;

任何帮助将不胜感激!

谢谢:)

1 个答案:

答案 0 :(得分:1)

您可以使用sql left join来检查变量。您可能需要在case语句或where子句中添加条件:

DATA CODES;
    DO CODE=1 TO 100;
        OUTPUT;
    END;
RUN;

DATA MY_CODES;
    DO CODE=50 TO 150;
        OUTPUT;
    END;
RUN;

Proc sql;
Create Table Check as
select a.*, case when a.code=b.code then 1
                else 0 end as match
from MY_CODES a
left join codes b
on a.code=b.code;
quit;