SAS where 条件精确匹配
SAS where condition exact matching
感谢大家的反馈,但我必须重写问题以使其更清楚。
说,我们有一个 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。
感谢大家的反馈,但我必须重写问题以使其更清楚。
说,我们有一个 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。