条件完全匹配的SAS

时间:2016-04-21 18:57:46

标签: sas where exact-match

感谢您的反馈,但我必须重写这个问题,以便更清楚。

说,我们有一张桌子:

Table

我想从这个表中得到的是一个数字列表,其中FP_NDT日期符合我的条件,例如,我想得到一个数字列表,其中2014年和2015年的FP_NDT不为空并且缺失2011年,2012年和2013年的价值(与月份无关)。因此,在这种情况下,我应该只获得4号。是否有可能从这张表中做到这一点?

PS:如果我编写一个简单的sql select语句并输入类似

的条件
where year(FP_NDT) in (2014,2015)

它也会给我2号和3号......

4 个答案:

答案 0 :(得分:0)

因此,您希望名称与1和2以及3相关联,但在不同的行中。

您可以按名称对行进行分组,并将关联的数字计为:

PROC SQL;
    CREATE TABLE xxx AS SELECT 
           name, 
           SUM(number=1) AS count1,
           SUM(number=2) AS count2,
           SUM(number=3) AS count3
    FROM test GROUP BY name;
QUIT;

然后,您可以根据count1-count3过滤结果,即(count1>0 AND count2>0 AND count3>0)

答案 1 :(得分:0)

试试这个:

proc sql;
select *
from work.test
group by name having nmiss(number)=0;
quit;

答案 2 :(得分:0)

我找到了一个工作,实际上是为每年创建单独的数据集,然后内部加入它们的where where条件为missing而不是null所需的年份。然而,就60个月而言,它变得有点麻烦,例如......

答案 3 :(得分:0)

为什么不首先总结数据?

proc sql;
  create table XX as
    select number
         , max(year(fp_ndt)=2011) as yr2011
         , max(year(fp_ndt)=2012) as yr2012
         , max(year(fp_ndt)=2013) as yr2013
         , max(year(fp_ndt)=2014) as yr2014
         , max(year(fp_ndt)=2015) as yr2015
    from table1
    group by number
  ;

现在很容易进行测试。

  select * from XX 
    where yr2014+yr2015=2 and yr2011+yr2012+yr2013=0
  ;

您可以将第一个查询用作子查询,而不是创建物理表。