感谢您的反馈,但我必须重写这个问题,以便更清楚。
说,我们有一张桌子:
我想从这个表中得到的是一个数字列表,其中FP_NDT日期符合我的条件,例如,我想得到一个数字列表,其中2014年和2015年的FP_NDT不为空并且缺失2011年,2012年和2013年的价值(与月份无关)。因此,在这种情况下,我应该只获得4号。是否有可能从这张表中做到这一点?
PS:如果我编写一个简单的sql select语句并输入类似
的条件where year(FP_NDT) in (2014,2015)
它也会给我2号和3号......
答案 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
;
您可以将第一个查询用作子查询,而不是创建物理表。