SAS where 条件精确匹配

SAS where condition exact matching

感谢大家的反馈,但我必须重写问题以使其更清楚。

说,我们有一个 table:

Table

我想从这个 table 得到的是一个数字列表,这些数字具有与我的条件匹配的 FP_NDT 日期,例如,我想得到一个数字列表,它只2014 年和 2015 年 FP_NDT 不为空,2011 年、2012 年和 2013 年缺少值(与月份无关)。因此,在这种情况下,我应该只得到 4 号。是否可以从 table 开始?

PS:如果我写一个简单的 sql select 语句并放置一个像

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

它还会给我数字 2 和 3...

因此您希望名称与 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).

试试这个:

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

我发现了一种解决方法,即为每年实际创建单独的数据集,然后在内部加入它们,并在需要的年份使用 where 条件进行缺失和不为空。不过到了60个月就有点麻烦了,比如...

为什么不先总结一下数据呢?

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
  ;

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