0

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

说,我们有一张桌子:

桌子

我想从这个表中得到一个数字列表,这些数字的 FP_NDT 日期与我的情况相匹配,例如,我想获得一个数字列表,其中只有 2014 年和 2015 年的 FP_NDT 不为空,2011 年的缺失值、2012 年和 2013 年(与月份无关)。所以在这种情况下,我应该只得到 4 号。是否可以从这张表中做到这一点?

PS:如果我写一个简单的 sql select 语句并放一个类似的条件

where year(FP_NDT) in (2014,2015)

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

4

4 回答 4

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)

于 2016-04-21T19:16:34.697 回答
0

试试这个:

proc sql;
select *
from work.test
group by name having nmiss(number)=0;
quit;
于 2016-04-21T20:00:53.820 回答
0

我找到了一项解决方法,即实际为每年创建单独的数据集,然后将它们与缺少的 where 条件内部连接,而不是所需年份的 null 条件。然而,当谈到 60 个月时,它变得有点麻烦,例如......

于 2016-04-26T16:56:10.237 回答
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
  ;

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

于 2016-04-26T17:43:49.037 回答